我想在服务器端和客户端使用相同的正则表达式,但是当我将它转换为 JS 时,它总是返回 false。我认为字符串文字导致了问题,但我没有看到在哪里。我找到了这个但仍然无法弄清楚: Lost in translation - C# regex to JavaScript regex
这是我的服务器端代码:
public static string EmailRegex = @"^[a-zA-Z0-9_\\.-]+@([a-zA-Z0-9-]+\\.)+[a-zA-Z]{2,6}$";
这是 Razor :
<input type="text" id="email" name="email" data-regex="@Model.EmailRegex" />
这是呈现的 HTML:
<input type="text" id="email" name="email" data-regex="^[a-zA-Z0-9_\\.-]+@([a-zA-Z0-9-]+\\.)+[a-zA-Z]{2,6}$">
这是在 $("#email").keyup() 上调用的 JS 代码:
function validateElementRegex(element) {
var regex = $(element).data("regex");
var value = $(element).val();
return validateRegex(value, regex);
}
function validateRegex(value, regex) {
if (typeof(value) === "undefined" || typeof(regex) === "undefined") {
return false;
}
var regexType = typeof(regex); // string e.g. "^[a-zA-Z0-9_\\.-]+@([a-zA-Z0-9-]+\\.)+[a-zA-Z]{2,6}$"
var pattern = new RegExp(regex, "i"); // tried with and without "i" - ignoreCase
var patternType = typeof(pattern); // object
var result = pattern.test(value); // always false
return result;
}
谢谢
最佳答案
哦,你的正则表达式中有一个额外的反斜杠:
^[a-zA-Z0-9_\\.-]+@([a-zA-Z0-9-]+\\.)+[a-zA-Z]{2,6}$
上面的正则表达式匹配email@myeamil\.com
但它不匹配email@myeamil.com
应该是:
^[a-zA-Z0-9_\\.-]+@([a-zA-Z0-9-]+\.)+[a-zA-Z]{2,6}$
关于c# - 共享正则表达式(C# 到 JS)- 始终为 false - 这里有什么问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21227200/