在IE8中javascript失败的正则表达式验证

时间:2013-09-11 21:12:22

标签: javascript regex internet-explorer-8

尝试使用此

(^AD\\[a-zA-Z]+$)|(^ad\\[a-zA-Z]+$)|(^Ad\\[a-zA-Z]+$)

^(AD|ad|Ad)\\([a-zA-Z]+$)

尝试验证AD \ loginid或ad \ loginid或Ad \ loginid

等字符串

以上正则表达式在线正则表达式测试工作正常.. 像http://regexpal.com/http://www.regular-expressions.info/javascriptexample.html

但是当我将它合并到脚本验证中时,它会因以下代码而失败...

var lanidRegex = new RegExp("(^AD\\[a-zA-Z]+$)|(^ad\\[a-zA-Z]+$)|(^Ad\\[a-zA-Z]+$)");
alert(lanidRegex.test("AD\loginid"));

我已经多次重写了正则表达式,但没有运气..

6 个答案:

答案 0 :(得分:2)

使用new RegExp时,需要使用加倍反斜杠(在您的情况下,四倍反斜杠),因为第一个反斜杠用于转义字符串,正则表达式可以看到第二个反斜杠。

您的意图是使正则表达式匹配反斜杠\,这意味着正则表达式引擎需要查看转义的反斜杠\\,这意味着您的字符串需要包含四个反斜杠{ {1}}。

答案 1 :(得分:1)

我认为你需要:

var lanidRegex = new RegExp("(^AD\\\\[a-zA-Z]+$)|(^ad\\\\[a-zA-Z]+$)|(^Ad\\\\[a-zA-Z]+$)");

一个反斜杠用于将每个反斜杠转换为字符串,另一个用于告诉正则表达式在正则表达式中引用反斜杠。

在警戒线中,您只需要其中两个:

alert(lanidRegex.test("AD\\loginid"));

(感谢其他回答者注意到这一点。)

FIDDLE

备用版本也适用:

var lanidRegex = /(^AD\\[a-zA-Z]+$)|(^ad\\[a-zA-Z]+$)|(^Ad\\[a-zA-Z]+$)/;

答案 2 :(得分:0)

问题是\在Javascript中有两个用途:它是字符串中的转义前缀,也是regexp中的转义前缀。由于您正在使用字符串来初始化正则表达式,因此它正在执行字符串转义。这会在正则表达式中产生一个反斜杠,因此它会转出方括号。

相反,请使用正则表达式文字:

var lanidRegex = /(^AD\\[a-zA-Z]+$)|(^ad\\[a-zA-Z]+$)|(^Ad\\[a-zA-Z]+$)/;
alert(lanidRegex.test("AD\\loginid"));

请注意,您还需要将文字字符串"AD\\loginid"中的反斜杠加倍。

使用i不区分大小写的修饰符可以大大简化您的正则表达式:

var lanidRegex = /^ad\\[a-z]+$/i;

如果你不想在开头允许aD,它仍然可以简化:

var lanidRegex = /^(AD|ad|Ad)\\[a-zA-Z]+$/;

你只需要前缀中的替代品,其余的是所有变体都是通用的。

答案 3 :(得分:0)

你有一些逃避问题。首先使用/包围正则表达式模式,它需要处理字符串中的一堆转义问题。

var lanidRegex = new RegExp(/(^AD\\[a-zA-Z]+$)|(^ad\\[a-zA-Z]+$)|(^Ad\\[a-zA-Z]+$)/);

其次,您需要在测试字符串中转义\。

alert(lanidRegex.test("AD\\loginid"));

答案 4 :(得分:0)

这终于工作了

var lanidRegex = new RegExp("^(AD|ad|Ad)\\\\([a-zA-Z]+$)", "gi");
lanidRegex.test("ad\name")

答案 5 :(得分:0)

你可以做得更简单

var lanidRegex = new RegExp("^(AD|ad|Ad)\([a-zA-Z]+)$");
var res = lanidRegex.test("AD\loginid");
window.console && console.log(res);