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

Regular expression validation in javascript failing in IE8

本文关键字:IE8 失败 正则表达式 JavaScript 验证      更新时间:2023-09-26

尝试使用这个

(^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"));

我已经多次以不同的方式重写了正则表达式,但没有运气。

> 使用 new RegExp 时,需要使用双倍的反斜杠(在本例中为四反斜杠),因为第一个反斜杠用于转义字符串,而正则表达式可以看到第二个反斜杠

你的目的是让正则表达式匹配反斜杠',这意味着正则表达式引擎需要看到一个转义的反斜杠'',这意味着你的字符串需要包含四个反斜杠"''''"

我认为你需要:

var lanidRegex = new RegExp("(^AD''''[a-zA-Z]+$)|(^ad''''[a-zA-Z]+$)|(^Ad''''[a-zA-Z]+$)");
一个反斜杠用于将每个反斜杠放入字符串中,另一个反斜杠用于

告诉正则表达式中引用了反斜杠。

在警报行中,您只需要其中两个:

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

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

小提琴

替代版本也有效:

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

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

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

其次,您需要转义测试字符串中的 ''。

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

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

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

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]+$/;

您只需要前缀中的替代项,其余的对于所有变体都是通用的。

你可以做得更简单

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

终于奏效了

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