如何检测正则表达式中的下划线? [复制]

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正则表达式呢?

如何通过正则表达式检测内容中的任何 URL [重复]

正则表达式:字母数字下划线和一些特殊字符

如何使用Python中的正则表达式解析文件名?

java中的正则表达式问题 怎么验证密码必须由字母 数字或下划线开头,密码可以随便组合

php正则表达怎么把一个字符串中的所有空格都转化为下划线