用于验证时间的正则表达式
Regular expression to validate time
我正在使用正则表达式"(?:[0-1]?[0-9]|[2][1-4]):[0-5]?[0-9]'s?(?:AM|am|PM|pm)?"
以验证时间。
var Regexp = new RegExp("(?:[0-1]?[0-9]|[2][1-4]):[0-5]?[0-9]'s?(?:AM|am|PM|pm)?");
if (Regexp.test(starttime)) {
var match = Regexp.exec(starttime);
if (match) {
s = match[0];
}
}
我的输入是"7:00 AM"
。但是我的match[0]
只返回"7.00"
。这不会返回AM
或PM
。似乎也只有一个群体。我如何在团队中获得AM/PM?
主要问题是使用字符串来定义正则表达式,并在该字符串中使用's
。字符串中的'
是一个转义符,所以regex看不到's
,它只看到s
(因为"'s" === "s"
,所以转义实际上没有任何作用)。你需要''s
。
但使用字面语法要好得多:
var rex = /(?:[0-1]?[0-9]|[2][1-4]):[0-5]?[0-9]'s?(?:AM|am|PM|pm)?/;
(我也更改了名称,Regexp
与RegExp
太接近了。)
实时示例:
var starttime = "7:00 AM";
var rex = /(?:[0-1]?[0-9]|[2][1-4]):[0-5]?[0-9]'s?(?:AM|am|PM|pm)?/;
if (rex.test(starttime)) {
var match = rex.exec(starttime);
if (match) {
snippet.log(match[0]);
}
}
<!-- Script provides the `snippet` object, see http://meta.stackexchange.com/a/242144/134069 -->
<script src="//tjcrowder.github.io/simple-snippets-console/snippet.js"></script>
(?:)
定义了一个非捕获组。如果要捕获组,请移除?:
。
由于存在一些混淆,这是一个更完整的答案:
如果希望s
包含"7:00 AM"
,则可以使用文字语法//
,也可以用另一个斜线(''s
)转义's
。注意,match[0]
不是一个组,而是完全匹配。
如果您想要第一组-时间和第二组-上午/下午-此轻微修改即可:
((?:[0-1]?[0-9]|[2][1-4]):[0-5]?[0-9])'s?(AM|am|PM|pm)?
您有一个转义序列问题,其中's
在正则表达式中变为s
。
然而,即使使用首选的文字语法来解决这个问题,您仍然需要考虑一些边缘情况。24:00不应该是一个时间,20:00应该是,所以将您的[1-4]
更改为[0-3]
。其次,23:00 AM
没有意义,13:00 PM
也没有意义。要解决此问题,您应该将regex分为两部分,以便匹配12小时时间或24小时时间。第三,时间7:0 PM
也匹配,因为在第一个分钟数字之后有一个?
。应该始终有两个分钟数字。
与regex一样,制作测试用例!这将帮助您了解正则表达式哪里出了问题(或没有出问题)。
工作正则表达式:(感谢TJ Crowder的精彩片段工具)
var tests = ["20:00", "24:00", "13:00 PM", "7:0 AM", "7:00 AM"];
var regex12hrTime = /((0?[0-9])|(1[0-2])):[0-5][0-9]'s?(AM|am|PM|pm)/;
var regex24hrTime = /([0-1][0-9]|2[0-3]):[0-5][0-9]/;
for (var idx=0; idx<tests.length; idx++) {
var test = tests[idx];
if (regex12hrTime.test(test)) {
snippet.log(test + " matches with " +
regex12hrTime.exec(test)[0]);
} else if (regex24hrTime.test(test)) {
snippet.log(test + " matches with " +
regex24hrTime.exec(test)[0]);
} else {
snippet.log(test + " does not match");
}
}
<!-- Script provides the `snippet` object, see http://meta.stackexchange.com/a/242144/134069 -->
<script src="//tjcrowder.github.io/simple-snippets-console/snippet.js"></script>
- 这个正则表达式的日期/时间有什么问题
- 为什么这个正则表达式需要这么长时间才能执行
- JavaScript 中的正则表达式来捕获时间字符串
- 用于检查时间格式的 JavaScript 正则表达式
- 用于确定时间的正则表达式
- Javascript/jQuery使用正则表达式搜索“分钟:秒”时间
- 时间正则表达式
- 如何使用正则表达式(正则表达式)验证 12 小时时间
- 使用正则表达式的JavaScript时间格式转换
- 如何修改时间正则表达式
- 12 小时时间格式的正则表达式
- 时间格式的 JavaScript 正则表达式验证问题
- 如何在没有正则表达式的情况下将 dd-MM-yyyy HH:mm:ss 转换为 Javascript 中的纪元时间
- 时间格式的正则表达式,如 DD:HH:MM:SS
- 如何在Javascript中使用AM/PM创建时间正则表达式
- 用于验证时间的正则表达式
- 带空格的日期和时间正则表达式
- javascript中的正则表达式用日期检查时间
- 使用JS正则表达式删除时间戳
- 正则表达式提取字符串中时间后的句号/句号