正则表达式不将下划线 (_) 识别为特殊字符

hat*_*hed 1 regex

我的正则表达式要求

  • 包括 1 个大写字母
  • 包括 1 个小写字母
  • 包括 1 位数字
  • 包括 1 个特殊角色
(/^(?=^.{8,40}$)(?=.*\d)(?=.*\W+)(?=.*[a-z])(?=.*[A-Z])(?!^.*\n).*$/)
Run Code Online (Sandbox Code Playgroud)

但是,如果我输入的1234ABcd_验证失败,则_似乎仅不被识别为特殊字符。我的正则表达式有什么解决方案吗?谢谢!

Bar*_*mar 5

看来您正在使用(?=.*\W+)来匹配特殊字符。But_是 中的单词字符\w,并且\W是其他所有内容,因此这与 不匹配_。将其更改为:(?=.*[\W_]+)

另外,你不需要+这个。您只需匹配 1 即可成功。