如何检测正则表达式中的下划线? [复制]
Posted
技术标签:
【中文标题】如何检测正则表达式中的下划线? [复制]【英文标题】: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)。
【参考方案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]
。所以,特殊字符的定义不是字母,不是数字,不是空格,也不是下划线。以上是关于如何检测正则表达式中的下划线? [复制]的主要内容,如果未能解决你的问题,请参考以下文章
如何写匹配任意个26个大小写字母,数字和下划线的Java正则表达式呢?