正则表达式不区分大小写的.net和Javascript

时间:2014-05-02 07:25:03

标签: regex

我有一个以下的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');

因为我在很多地方使用它,并且不能在所有地方改变。

提前致谢

4 个答案:

答案 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])$

Regular expression visualization

Debuggex Demo

没有组的版本(如果您不使用它们并仅检查输入值的有效性):

^(?:0?[1-9]|1[0-2]):[0-5]\d\s?[aApP][mM]$

Regular expression visualization

Debuggex Demo

答案 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分”));