第一个单词的正则表达式是星期几

regex for the first word is day of the week

本文关键字:正则表达式 单词 第一个      更新时间:2023-09-26

有人能建议一个正则表达式来测试字符串的第一个单词是否是一周中的某一天吗。

例如"7月16日星期二"

到目前为止,我有这个:

/^((Monday)|(Tuesday)|(Wednesday)|(Thursday)|(Friday)|(Saturday)|(Sunday))/.test("Tuesday, July 16")

哪一个有效,有没有办法进一步使用正则表达式将表达式拆分为日和月?

试试这个:

 /^(?i)'W*(?:Mon|Tues|Wednes|Thurs|Fri|Satur|Sun)day'b['s'S]*$/.test("Tuesday, July 16")

就我个人而言,我想把它分解成多个部分。一个检查格式,另一个检查值中数据的有效性。

首先,使用一个基本的正则表达式检查格式:

var input = "Tuesday, July 16";
var pattern = new RegExp("^([a-z]+), ([a-z]+) (''d{2})$", "i");
var isFormattedCorrectly = pattern.test(input);

然后,如果格式正确,我会将有效的日期和月份值存储在两个数组中,并检查日期是否与其中一个值匹配:

var validDays = ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"];
var validMonths = ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"];
var isValidDay = false;
var isValidMonth = false;
if (isFormattedCorrectly ) {
    var dateParts = input.match(pattern);
    isValidDay = (validDays.indexOf(dateParts[1]) > 0) ? true : false;
    isValidMonth = (validMonths.indexOf(dateParts[2] > 0) ? true : false;
}

注意:如果您使用JQuery,您也可以使用JQuery.inArray()而不是.indexOf()

虽然它可能不是"简短而甜蜜"的,但我有几个理由建议这种方法:

  1. 正如我之前提到的,它允许您将格式化和数据检查彼此分离,这通常被认为是一件好事。:)
  2. 它支持更详细的验证消息(例如,"日期必须格式化为…"、"您必须输入有效月份"等),而不是单一的、通用的"这不是有效日期"消息
  3. 希望它能更容易地维护"有效值"数据,因为它只是一个数组,而不是regex中内置的模式。您可以随意更新值(例如,如果您想使用3个字符的月份和日期值,而不是完整的单词)
  4. 它允许轻松的语言自定义(例如,如果您出于某种原因需要支持西班牙语,您可以将数组中的数据切换为西班牙语天数和月份,并且检查仍然有效)