javascript中的正则表达式验证在IE8中失败
试着用这个javascript中的正则表达式验证在IE8中失败,javascript,regex,internet-explorer-8,Javascript,Regex,Internet Explorer 8,试着用这个 (^AD\\[a-zA-Z]+$)|(^ad\\[a-zA-Z]+$)|(^Ad\\[a-zA-Z]+$) 或 尝试验证AD\loginid或AD\loginid或AD\loginid等字符串 以上regex在regex在线测试仪上运行良好。。 喜欢 或 但当我将其合并到脚本验证中时,以下代码将失败 var lanidRegex = new RegExp("(^AD\\[a-zA-Z]+$)|(^ad\\[a-zA-Z]+$)|(^Ad\\[a-zA-Z]+$)"); alert(
(^AD\\[a-zA-Z]+$)|(^ad\\[a-zA-Z]+$)|(^Ad\\[a-zA-Z]+$)
或
尝试验证AD\loginid或AD\loginid或AD\loginid等字符串
以上regex在regex在线测试仪上运行良好。。
喜欢
或
但当我将其合并到脚本验证中时,以下代码将失败
var lanidRegex = new RegExp("(^AD\\[a-zA-Z]+$)|(^ad\\[a-zA-Z]+$)|(^Ad\\[a-zA-Z]+$)");
alert(lanidRegex.test("AD\loginid"));
我多次以不同的方式重写了正则表达式,但运气不佳。我认为您需要:
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"));
(感谢其他回答者注意到这一点。)
替代版本也适用:
var lanidRegex = /(^AD\\[a-zA-Z]+$)|(^ad\\[a-zA-Z]+$)|(^Ad\\[a-zA-Z]+$)/;
问题是
\
在Javascript中有两个用途:它是字符串中的转义前缀,在regexp中也是。因为您使用字符串初始化regexp,所以它执行字符串转义。这将导致regexp中出现一个反斜杠,因此它将转义方括号
相反,请使用regexp文本:
var lanidRegex = /(^AD\\[a-zA-Z]+$)|(^ad\\[a-zA-Z]+$)|(^Ad\\[a-zA-Z]+$)/;
alert(lanidRegex.test("AD\\loginid"));
请注意,您还需要将文本字符串“AD\\loginid”中的反斜杠加倍
使用i
不区分大小写的修饰符可以大大简化regexp:
var lanidRegex = /^ad\\[a-z]+$/i;
如果您不想在开始时允许aD
,仍然可以简化:
var lanidRegex = /^(AD|ad|Ad)\\[a-zA-Z]+$/;
您只需要前缀中的替代项,其余的是所有变体所共有的。问题在于
\
在Javascript中有两个用途:它是字符串中的转义前缀,在regexp中也是。因为您使用字符串初始化regexp,所以它执行字符串转义。这将导致regexp中出现一个反斜杠,因此它将转义方括号
相反,请使用regexp文本:
var lanidRegex = /(^AD\\[a-zA-Z]+$)|(^ad\\[a-zA-Z]+$)|(^Ad\\[a-zA-Z]+$)/;
alert(lanidRegex.test("AD\\loginid"));
请注意,您还需要将文本字符串“AD\\loginid”中的反斜杠加倍
使用i
不区分大小写的修饰符可以大大简化regexp:
var lanidRegex = /^ad\\[a-z]+$/i;
如果您不想在开始时允许aD
,仍然可以简化:
var lanidRegex = /^(AD|ad|Ad)\\[a-zA-Z]+$/;
您只需要前缀中的替代项,其余的是所有变体所共有的。在使用new RegExp
时,您需要使用两倍的反斜杠(在您的情况下,四倍的反斜杠),因为第一个反斜杠用于转义字符串,第二个反斜杠由正则表达式看到
您的目的是让正则表达式匹配反斜杠\
,这意味着正则表达式引擎需要看到转义的反斜杠\\
,这意味着您的字符串需要包含四个反斜杠“\\\\”
,,您需要使用两倍的反斜杠(在您的例子中,四倍反斜杠)当您使用new RegExp
时,因为第一个反斜杠用于转义字符串,第二个反斜杠由正则表达式看到
您的目的是让正则表达式匹配反斜杠
\
,这意味着正则表达式引擎需要看到转义的反斜杠\
,这意味着字符串需要包含四个反斜杠“\\\\”
您遇到了一些转义问题。首先用/,围绕您的正则表达式模式,它可以处理字符串中的一系列转义问题
var lanidRegex = new RegExp(/(^AD\\[a-zA-Z]+$)|(^ad\\[a-zA-Z]+$)|(^Ad\\[a-zA-Z]+$)/);
其次,您需要转义测试字符串中的\
alert(lanidRegex.test("AD\\loginid"));
您有一些转义问题。首先,在regex模式中使用/,它可以处理字符串中的大量转义问题
var lanidRegex = new RegExp(/(^AD\\[a-zA-Z]+$)|(^ad\\[a-zA-Z]+$)|(^Ad\\[a-zA-Z]+$)/);
其次,您需要转义测试字符串中的\
alert(lanidRegex.test("AD\\loginid"));
这终于奏效了
var lanidRegex = new RegExp("^(AD|ad|Ad)\\\\([a-zA-Z]+$)", "gi");
lanidRegex.test("ad\name")
这终于奏效了
var lanidRegex = new RegExp("^(AD|ad|Ad)\\\\([a-zA-Z]+$)", "gi");
lanidRegex.test("ad\name")
你可以做得更简单
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]+)$");
var res = lanidRegex.test("AD\loginid");
window.console && console.log(res);
我不知道为什么这不起作用,但我想说,
^(AD|[Aa][d])\[a-zA-Z]+$
是一个更好的regex@JoeFrambach fixed。你可能想试试alert(“AD\loginid”)
,我想你会感到惊讶。不,OP不想匹配AD
。我不确定这为什么不起作用,但我会说^(AD\Aa][d])\\[a-zA-Z]+$
是一个更好的正则表达式@JoeFrambach fixed。您可能想尝试alert(“AD\loginid”)
,我想您会感到惊讶。不,OP不想匹配AD
。尝试了没有运气..不适用于alert(lanidRegex.test(“AD\loginid”));@user2770382我解释过,你必须将警报字符串中的斜杠加倍。运气不好..不适用于警报(lanidRegex.test(“AD\loginid”);@user2770382我解释过,你必须将警报字符串中的斜杠加倍。如果你使用regexp文本,你不需要new regexp()
。如果使用regexp文本,则不需要添加new regexp()
。添加新的fiddle。适用于Chrome和my IE(不是8)。添加新的fiddle。适用于Chrome和my IE(不是8)。警告:“i”regex选项使搜索大小写不敏感如果您不关心大小写,请使用/^ad\\\\[a-z]+$/i
。而g
选项没有任何用处。警告:“i”regex选项使搜索大小写不敏感。如果您不关心大小写,只需使用/^ad\\\[a-z]+$/i
。g
选项没有任何用处。