【问题标题】:JQuery Validate plugin - password check - underscore as single special character [duplicate]JQuery Validate插件 - 密码检查 - 下划线作为单个特殊字符[重复]
【发布时间】:2020-06-17 14:39:29
【问题描述】:

我尝试使用此代码验证 PW

$.validator.addMethod("pwcheck", function(value) {
return /[^\W\s]/gi.test(value) // match any wordCharacter
    && /[a-z]/.test(value) // has a lowercase letter
    && /[A-Z]/.test(value) // has a uppercase letter
    && /\d/.test(value) // has a digit      
    && /(?=.*?\W)/.test(value) // has a specialChar
});

不幸的是,如果我的 PW 有一个下划线作为单一特殊字符,例如1_Testing

可以做什么? 提前致谢

【问题讨论】:

  • /(?=.*?[\W_])/替换/(?=.*?\W)/
  • 这正好回答了你的问题。 Validation for passwords with special characters
  • @Mandy8055 提问方式类似,但要求和问题不同。
  • @Mandy8055 我可能误解了这个问题。让我们听听 OP,如果 summsel 同意重复,那么我误解了当前的问题。
  • 否@WiktorStribiżew;我对你的答案没有任何问题。它一如既往地无可挑剔,但我认为它是重复的,所以想得到你的看法。

标签: jquery regex passwords


【解决方案1】:

有两个问题需要解决:

  • \W 也匹配空格,[\W\s] 等于 \W。因此,/[^\W\s]/ 应该只是 /\w/
  • \W 不匹配下划线。当您需要特殊字符并且下划线被视为特殊字符时,您需要使用[\W_] 字符类

另请注意,与RegExp#test 一起使用的正则表达式永远不应与g 标志一起使用,这可能会导致like this 问题(此处不是这种情况,但作为最佳实践)。此外,\w 匹配任何大小写的 ASCII 字母,因此这里不需要使用不区分大小写的 i 修饰符。

所以,你可以使用

return /\w/.test(value)        // match any wordCharacter
    && /[a-z]/.test(value)     // has a lowercase letter
    && /[A-Z]/.test(value)     // has a uppercase letter
    && /\d/.test(value)        // has a digit      
    && /^[^\W_]*[\W_]/.test(value) // has a specialChar
});

^[^\W_]*[\W_] 模式意味着

  • ^ - 匹配字符串开头
  • [^\W_]* - 除非单词字符或 _ 之外的 0 个或多个字符(即 0 个或多个字母或数字)
  • [\W_] - 非单词字符或_ 字符。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-19
    • 2014-02-16
    • 1970-01-01
    • 1970-01-01
    • 2015-11-17
    • 1970-01-01
    • 2014-06-29
    相关资源
    最近更新 更多