在JavaScript中验证密码;正则表达式

时间:2010-11-09 21:31:13

标签: c# javascript html regex

在我正在使用的系统上,我们有一个Password类,可以通过在以下条件下抛出异常来验证:

public Password(string password)
    : base(password)
{
    // Must contain digit, special character, or uppercase character

    var charArray = password.ToCharArray();

    var hasDigit = charArray.Select(c => char.IsDigit(c)).Any();
    var hasSpecialCharacter = charArray.Select(c => char.IsSymbol(c)).Any();
    var hasUpperCase = charArray.Select(c => char.IsUpper(c)).Any();

    if (!hasDigit && !hasSpecialCharacter && !hasUpperCase)
    {
        throw new ArgumentOutOfRangeException
             ("Must contain at least one digit, symbol, or upper-case letter.");
    }
}

如果我要在JavaScript中为hasDigit,hasSpecialCharater和hasUpperCase编写相同的检查,它会是什么样的?

JavaScript没有这些相同的角色原型,所以我必须使用正则表达式,不是吗?

3 个答案:

答案 0 :(得分:1)

hasDigit:

/\d/.test(password);

hasUpperCase:

/[A-Z]/.test(password);

hasSpecialCharacter:

/[^a-zA-Z0-9]/.test(password);

修改 .test.match

好得多

答案 1 :(得分:1)

这三个条件可以与:

组合在一起
if (/\d|\W|[A-Z]/.test(theString)) {
 ...

其中

  • \d→1位数(0-9),
  • \W→1个非单词字符(0-9,az,AZ和_以外的任何字符)如果密码匹配,则匹配的字符多于C#的IsSymbol 支持ASCII以外的字符,
  • [A-Z]→1个大写字符

但唯一与\d|\W|[A-Z]不匹配的字符是az,我们也可以简单地写一下

if (/[^a-z]/.test(theString)) {

答案 2 :(得分:0)

您应该能够将所有测试合并到一个JS正则表达式中:

if (!passwordString.match(/[^a-z ]/)) {
    alert('Invalid password.');
    return false;
}