【问题标题】:How to detect underscore in regex? [duplicate]如何检测正则表达式中的下划线? [复制]
【发布时间】:2018-04-21 06:59:19
【问题描述】:

我有一个regex 表达式来测试我的密码:至少一个数字,至少一个大写字母,至少一个小写字母 和至少一个特殊字符。

/^(?=.*?[A-Z])(?=.*?[a-z])(?=.*?[0-9])(?=.*?[^\w\s])/

但 下划线 无法识别为 special character。

我该如何改进?

【问题讨论】:

  • [^\w\s] 与 _ 不匹配。替换为[^a-zA-Z0-9\s]
  • @WiktorStribiżew,这行得通。请发布它作为答案。谢谢!
  • 请注意,像这样强加字符级密码要求被认为是不好的做法(参见例如NIST Guidelines for Memorized Secret Verifiers)。

标签: javascript regex expression


【解决方案1】:

这里的问题是,对于 JavaScript,\w 代表:

[a-zA-Z0-9_]

所以你隐式地避免_。

说明

这部分正则表达式:

(?=.*?[^\w\s]) // Match special character

相当于:

(?=.*?[^a-zA-Z0-9_\s])

参考书目

\w 元字符用于查找单词字符。

单词字符是从 a-z、A-Z、0-9 的字符,包括 _ (下划线)字符。

https://www.w3schools.com/jsref/jsref_regexp_wordchar.asp

【讨论】:

  • 我的意思是下划线不是special character的一部分。
  • @Alexandru-IonutMihai 问题是你在做[^\w\s],它相当于[^a-zA-Z0-9_\s]。所以,特殊字符的定义不是字母,不是数字,不是空格,也不是下划线。
猜你喜欢
  • 2021-12-26
  • 2016-09-24
  • 2011-07-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多