0

我必须对文本框中的文本进行一些模式匹配。我在 C# 服务器的回发事件中这样做。我的正则表达式如下:

 public bool ValidatePassword(string temp)
    {
        bool isMatch = false;
        passwd = passwd.Trim();

        isMatch = Regex.IsMatch(temp,
                             @"^           # Start of string
                        (?=.*\p{Lu})      # Assert at least one uppercase letter
                        (?=.*\p{Ll})      # Assert at least one lowercase letter
                        (?=.*\d)          # Assert at least one digit
                        (?=.*[^\p{L}\d])  # Assert at least one other character
                        .{8,13}           # Match at least 8 characters and maximum of 13 characters
                        $                 # End of string",
                             RegexOptions.IgnorePatternWhitespace);


        return isMatch;
    }

我想将其移至 Javascript,以便在客户端进行匹配。有人可以帮我将此功能移至 Javascript 吗?

4

3 回答 3

1

就像是:

function ValidatePassword(temp) {
  return /^(?=.*[A-Z])(?=.*[a-z])(?=.*\d)(?=.*[^a-zA-Z\d]).{8,13}$/.test(temp);
}
于 2012-09-23T07:54:54.097 回答
1

JavaScript 正则表达式实现只理解拉丁字符的大小写,它不实现国家字符语义,所以,不幸的是,没有办法翻译这个正则表达式,甚至在任何接近原点的地方都没有......

如果您将此作为学习练习,那么,也许您可​​以看一下正则表达式的 Perl 实现并拥有一份副本。但是,如果您的问题更多地涉及实际领域,那么请考虑您的目标受众以及他们可能输入的语言,查找其字符集中的小写/大写字母的 Unicode 代码点并采取相应的行动。另请注意,许多非拉丁语言没有字母大小写的概念。

或者,也许,考虑更严格的密码规则。:)

于 2012-09-23T10:06:24.880 回答
0

在 Javascript 中匹配大小写字母并不容易,因为它不支持\p{…}字符类。我建议您在正则表达式之外进行测试。另外,“其他字符”很难定义,是只是[^a-z0-9],还是没有变音符号等?顺便说一句,您宁愿强制使用更长的密码而不是更神秘的密码。

function validatePassword(temp) {
    // temp = temp.trim() - is not supported in all browsers or needs to be shimmed
    //                      will be done in the regex

    if (temp.toUpperCase() == temp) // no lowercase char
        return false;
    if (temp.toLowerCase() == temp) // no uppercase char
        return false;

    return temp.test(/^\s*(?=.*\d).{8,13}\s*$/);
}
于 2012-09-23T10:00:53.903 回答