我有一个以下的Regex,它在很多地方使用(客户端验证和服务器端验证)
客户端
var _timeFormat = "^(1|01|2|02|3|03|4|04|5|05|6|06|7|07|8|08|9|09|10|11|12{1,2}):(([0-5]{1}[0-9]{1}\s{0,1})( [AM|PM]{2,2}))\W{0}$";
服务器端
public const string TIME = @"^(?-i:1|01|2|02|3|03|4|04|5|05|6|06|7|07|8|08|9|09|10|11|12{1,2}):(([0-5]{1}[0-9]{1}\s{0,1})([AM|PM]{2,2}))\W{0}$";
我的问题是当用户键入am或Am / pm或Pm时它应该接受。
我试过了
var _timeFormat = "^(?-i:1|01|2|02|3|03|4|04|5|05|6|06|7|07|8|08|9|09|10|11|12{1,2}):(([0-5]{1}[0-9]{1}\s{0,1})( [AM|PM]{2,2}))\W{0}$";
它适用于服务器端,但在javascript上它不起作用。
请建议我应该使用什么。
我不想使用
var re = new RegExp(_timeFormat, 'i');
因为我在很多地方使用它,并且不能在所有地方改变。
提前致谢
答案 0 :(得分:1)
自RegExp构造函数returns a copy of a passed in RegExp if passed one以来,您可以将_timeFormat变为不区分大小写的RegExp并使其传播;
var _timeFormat = /^(1|01|2|02|3|03|4|04|5|05|6|06|7|07|8|08|9|09|10|11|12{1,2}):(([0-5]{1}[0-9]{1}\s{0,1})( [AM|PM]{2,2}))\W{0}$/i;
var re = new RegExp(_timeFormat); // re is now also case insensitive
答案 1 :(得分:1)
我简化了你的正则表达式。它可以在客户端和服务器端工作。
^(0?[1-9]|1[0-2]):([0-5]\d)\s?([aApP][mM])$
没有组的版本(如果您不使用它们并仅检查输入值的有效性):
^(?:0?[1-9]|1[0-2]):[0-5]\d\s?[aApP][mM]$
答案 2 :(得分:1)
客户端正则表达式失败的一个原因是您没有转义字符串中的\
。
您需要使用双反斜杠转义反斜杠:
"\\s"
或使用正则表达式文字:
/\s/
答案 3 :(得分:0)
你应该试试这个:
var _timeFormat = / ^(1 | 01 | 2 | 02 | 3 | 03 | 4 | 04 | 5 | 05 | 6 | 06 | 7 | 07 | 8 | 08 | 9 | 09 | 10 | 11 | 12 {1,2}):(([0-5] {1} [0-9] {1} \ S {0,1})(AM | PM))\ W {0} $ / I;
警报(_timeFormat.test( “上午01时10分”));