【问题标题】:Regex Pattern working in regex tester but not in actual code [duplicate]正则表达式模式在正则表达式测试器中工作但在实际代码中不工作[重复]
【发布时间】:2016-11-04 03:26:42
【问题描述】:

以下正则表达式检查在代码中不起作用。但是如果我在 regex101.com 上使用这种模式,它就可以完美地工作

var pattern = "^([a-zA-Z0-9]([-\.\w]*[a-zA-Z0-9])*@([a-zA-Z0-9][-\w]*[a-zA-Z0-9]\.)+[a-zA-Z]{2,9})$";
var value = "test@user.com";

var regexp = new RegExp(pattern);
if (!regexp.test(value)) {
  	alert("Failed");
} else {
	alert("passed");
}

请您帮我解释一下为什么会发生这种情况。顺便说一句,如果我进行如下所示的一些修改,它就可以工作。但我希望它与 (new RegExp(pattern)) 一起使用

var pattern = /^([a-zA-Z0-9]([-\.\w]*[a-zA-Z0-9])*@([a-zA-Z0-9][-\w]*[a-zA-Z0-9]\.)+[a-zA-Z]{2,9})$/;
var value = "test@user.com";

if (!pattern.test(value)) {
  	alert("Failed");
} else {
	alert("passed");
}

【问题讨论】:

  • 但我希望它与 (new RegExp(pattern) 为什么?
  • @torazaburo 得到了答案。我需要在每个反斜杠前面的正则表达式中添加额外的反斜杠。因为“new regExp(pattern)”正在从模式中剥离反斜杠,这就是它不起作用的原因。

标签: javascript regex email-validation


【解决方案1】:

只需删除双引号并将您的正则表达式简单地放在正斜杠中。

var pattern = /^([a-zA-Z0-9]([-\.\w]*[a-zA-Z0-9])*@([a-zA-Z0-9][-\w]*[a-zA-Z0-9]\.)+[a-zA-Z]{2,9})$/;
var value = "test@user.com";

var regexp = new RegExp(pattern);
if (!regexp.test(value)) {
  	alert("Failed");
} else {
	alert("passed");
}

这是因为,如果你要加双引号,那么你需要转义你的正则表达式

但是,您可以简单地将正则表达式放在正斜杠之间。

【讨论】:

  • 但是如果我们必须用引号来做到这一点?在实际代码中,这个正则表达式来自一个 json 对象。
【解决方案2】:

您需要转义那些反斜杠 (\)。

var pattern = "^([a-zA-Z0-9]([-\\.\\w]*[a-zA-Z0-9])*@([a-zA-Z0-9][-\\w]*[a-zA-Z0-9]\\.)+[a-zA-Z]{2,9})$";
var value = "test@user.com";

var regexp = new RegExp(pattern);
if (!regexp.test(value)) {
  	console.log("Failed");
} else {
	console.log("passed");
}

【讨论】:

  • @torazaburo 他需要解释为什么它不适用于RegExp
  • @torazaburo 来自问题:“但我希望它与 (new RegExp(pattern)) 一起使用”
  • @torazaburo OP 说:为什么会发生这种情况。显然他想要一个解释
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-10-22
  • 1970-01-01
  • 2012-07-24
相关资源
最近更新 更多