0

试图用这个

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

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

4

6 回答 6

2

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

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

于 2013-09-11T21:18:22.717 回答
1

我认为你需要:

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]+$)/;
于 2013-09-11T21:17:57.670 回答
0

This worked finally

var lanidRegex = new RegExp("^(AD|ad|Ad)\\\\([a-zA-Z]+$)", "gi");
lanidRegex.test("ad\name")
于 2013-09-12T17:13:19.633 回答
0

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

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

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

alert(lanidRegex.test("AD\\loginid"));
于 2013-09-11T21:20:51.070 回答
0

你可以做得更简单

var lanidRegex = new RegExp("^(AD|ad|Ad)\([a-zA-Z]+)$");
var res = lanidRegex.test("AD\loginid");
window.console && console.log(res);
于 2013-09-12T21:02:19.427 回答
0

问题在于它\在 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]+$/;

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

于 2013-09-11T21:18:20.593 回答