c# - 共享正则表达式(C# 到 JS)- 始终为 false - 这里有什么问题?

标签 c# javascript regex email-validation

我想在服务器端和客户端使用相同的正则表达式,但是当我将它转换为 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/

相关文章:

c# - 将 C++ 转换为 C#

c# - 是什么导致 HttpClient 中的 "WinHttpException: The server returned an invalid or unrecognized response"?

c# - Dapper 异常 - Get<T> 仅支持具有 [Key] 属性的实体,但已定义 [key]

javascript - 缩小 border-radius div 元素并保持相同位置,蛋形

javascript - 当浏览器调整到特定高度时更改固定位置

c# - 显示等待屏幕 WindowsPhone8

javascript - 音频播放器不适用于多个音频

javascript - 从数据库中检索正则表达式在java和javascript中是不同的

javascript - 正则表达式仅使用第一个单词来匹配复合词

r - 我能合理拆分这些数字串吗?