尝试使用此
(^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"));
我已经多次重写了正则表达式,但没有运气..
答案 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"));
(感谢其他回答者注意到这一点。)
备用版本也适用:
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);