3

我有一个正则表达式来验证密码是否包含数字、小写和大写字符。

下面的一个工作正常。但是当我在 jQuery Validation 中使用它时:

txtPassword: {
    required: true,
    regex: Regex
}

Regex = (?=^.{8,16}$)(?=.*\d)(?=.*[a-z])(?=.*[A-Z])(?=.*[!@#$%^&*()_+}{":;/'?/>.<,])(?!.*\s).*$

但问题是'Javascript 中的单引号。有人可以帮我解决这个问题吗?谢谢你。

4

1 回答 1

2

在这个正则表达式中有几件事需要修复:

  • 在您对密码的前瞻检查中,您有一个没有量词的句点。因此,它将始终无法通过该检查。例如,对于号码检查,您应该(?=.*\d)使用(?=.\d).
  • 您不使用正斜杠转义字符/,而是使用反斜杠\。您在最后一个字符类中使用正斜杠错误地转义了它。
  • 字符类中唯一的特殊字符或元字符是右括号 ( ])、反斜杠 ( \)、插入符号 ( ^) 和连字符 ( -)。因此,这不是由于单引号。罪魁祸首是你没有逃脱的插入符号。

试试这个正则表达式,其中插入符号^而不是引号被转义'

(?=^.{8,16}$)(?=.*\d)(?=.*[a-z])(?=.*[A-Z])(?=.*[!@#$%\^&*()_+}{":;'?/>.<,])(?!.*\s)^.*$

我假设你的问题,你的意思是一个正则表达式来验证密码:

  • 至少 1 个号码
  • 至少 1 个小写字符
  • 至少 1 个大写字符
  • 集合中至少有 1 个特殊字符!@#$%^&*()_+}{":;'?/>.<,
  • 长度在 8 到 16 个字符之间

如果这是真的,请用明确的要求更新您的问题。


RegexPal中使用正则表达式


基于 jQuery 的代码。在这里摆弄这个:

var regex = /(?=^.{8,16}$)(?=.*\d)(?=.*[a-z])(?=.*[A-Z])(?=.*[!@#$%\^&*()_+}{":;'?/>.<,])(?!.*\s)^.*$/g;
//if(regex.test($('#txtPassword').val())){ alert('Match'); }else{alert('No Match')}
if (regex.test('P@sSw0rD')) {
    alert('Match');
} else {
    alert('No Match');
}​
于 2012-09-18T01:33:33.700 回答