第一个单词的正则表达式是星期几
regex for the first word is day of the week
有人能建议一个正则表达式来测试字符串的第一个单词是否是一周中的某一天吗。
例如"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()
。
虽然它可能不是"简短而甜蜜"的,但我有几个理由建议这种方法:
- 正如我之前提到的,它允许您将格式化和数据检查彼此分离,这通常被认为是一件好事。:)
- 它支持更详细的验证消息(例如,"日期必须格式化为…"、"您必须输入有效月份"等),而不是单一的、通用的"这不是有效日期"消息
- 希望它能更容易地维护"有效值"数据,因为它只是一个数组,而不是regex中内置的模式。您可以随意更新值(例如,如果您想使用3个字符的月份和日期值,而不是完整的单词)
- 它允许轻松的语言自定义(例如,如果您出于某种原因需要支持西班牙语,您可以将数组中的数据切换为西班牙语天数和月份,并且检查仍然有效)
相关文章:
- 用于匹配不带字符的单词的正则表达式
- 在正则表达式中搜索单词
- 在字符串列表中搜索任何出现的单词,如果单词的第一个字符匹配,则高亮匹配单词.Javascript正则表达式
- 正则表达式用于在javascript中存储单词之前和之后
- 只使用正则表达式匹配单词后面的所有内容
- 用特定的javascript正则表达式替换每个单词
- 正则表达式以更改字符串中的某些单词
- 匹配给定的正则表达式,除非存在给定的单词(lookahead或lookbacking)
- 如何通过JavaScript正则表达式匹配不同语言中的单词
- Javascript 正则表达式在特定单词或数字之后拆分
- 短语中类似单词的正则表达式交替
- 与冒号(不包括冒号)之间的正则表达式单词匹配
- 连续重复的单词以使用正则表达式进行更改
- 用于匹配带空格和不带空格的多个单词的正则表达式
- 如何使用正则表达式 JavaScript 替换具有特定单词的整行
- 使用正则表达式获取多个单词,单词之间留有空格
- 一个具有精确pettern的单词的正则表达式
- JS正则表达式匹配单词,包括用空格括起来的单词
- 使用 JavaScript 正则表达式获取所有没有 HTML 标签的单词
- 如果里面的模式匹配,抓取完整的正则表达式单词