Regex 如何改进正则表达式?

Regex 如何改进正则表达式?,regex,Regex,我需要编写一个匹配字符的正则表达式:a-z a-z 0-9.!$%&-_@#没有空格,并且以任何可能的顺序排列,但是我对正则表达式的了解非常好,可以说比expert更接近于0。并且需要至少有一个数字、一个特殊字符和一个字母 我自己能做的是: [\S\w\.!$%&-_@#][^ ]{6,} 但我不确定它会像我想象的那样工作 问题: 我怎样才能使它匹配整个单词而不是它的一部分 编辑: 我已经测试过了,但不符合以下要求: 并且需要至少有一个数字、一个特殊字符和一个字母 示例: 不匹配: a

我需要编写一个匹配字符的正则表达式:
a-z a-z 0-9.!$%&-_@#
没有空格,并且以任何可能的顺序排列,但是我对正则表达式的了解非常好,可以说比expert更接近于0。并且需要至少有一个数字、一个特殊字符和一个字母

我自己能做的是:

[\S\w\.!$%&-_@#][^ ]{6,}
但我不确定它会像我想象的那样工作

问题:

我怎样才能使它匹配整个单词而不是它的一部分

编辑: 我已经测试过了,但不符合以下要求:

并且需要至少有一个数字、一个特殊字符和一个字母

示例:

不匹配:

aS1@.&%~+

asd dfgf

axf1345

1s4%z-@$.!$%&-_@#

正确:

a1S#@%.

1aCF3%&

Abloct2$

@anubhava回答:


^(?=..[0-9])(?=.[a-zA-Z])(?=.?[.!$%&@#-])[\w.!$%&@#-]{6,}$

您可以使用这个基于前瞻的正则表达式:

^(?=.*?[0-9])(?=.*?[a-zA-Z])(?=.*?[_.!$%&@#-])[\w.!$%&@#-]{6,}$
  • (?=.*[0-9])
    是一种前瞻性方法,以确保至少有一个数字
  • (?=.*[a-zA-Z])
    是一种前瞻性方法,可确保至少有一个字母表
  • (?=.*?[.!$%&@#-])
    是一种前瞻性方法,可确保至少有一个特殊字符

尝试此查看详细信息下面的链接(页面中间部分)

添加锚定
^
$
,使用
mulltiline
标记
\S
将包括所有内容,而不是空格=Unicode的其余部分。@nhahdh您是否建议我需要将
\S
更改为
a-zA-Z
?@harry180:删除它,因为
\w
已经涵盖了
a-zA-Z0-9.
@harry180:添加一些有效和无效匹配的示例。我认为
*?
应该是
[\w.!$%&@#-]*
,否则“a1”将匹配。哦,那么在行中的任何位置?我认为Q是连续的。@anubhava现在这个正则表达式不能确保提供的字符串中有6个以上的字符。要使其正确:
^(?=.[0-9])(?=.[a-zA-Z])(?=.[!$%&@#-])[\w.!$%&@#-]{6,}+$
/[0-9a-zA-Z\$%&]+/