2017-01-26 104 views
-1

目前我有以下正则表达式模式:正则表达式模式小写和大写和数字或特殊字符

^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[[email protected]$!%*?&])[A-Za-z\[email protected]$!%*?&]{8,} 

其是至少一个小写,一个大写,一个数字和一个特殊字符。 如何制作特殊字符可选

+0

你能告诉我们输入字符串和相关预期输出的例子吗? – Niitaku

+0

顺便提一下,特殊字符列表中的重复'$'是多余的。您可以使用'[$ @!%*?&]'和[A-Za-z \ d $ @!%*?&'' –

回答

0

看起来像所有你需要的是一个?[[email protected]$!%*?&]

你的正则表达式应该是^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[[email protected]$!%*?&]?)[A-Za-z\[email protected]$!%*?&]{8,}

https://regex101.com/r/1V8Xsq/1

+1

'(?=。* [$ @ $!%*?&] ?)'可以缩短为。 (就是什么都没有。) – melpomene

+0

@melpomene同意。整个'(?=。* [$ @ $!%*?&])'可以被删除,因为它是现在可选的积极向前看。 '。*'什么都不能匹配,'[$ @ $!%*?&]?'什么都不能匹配,所以整个预测都是毫无意义的'(?=。*)'。好点子。 –

1

我怎样才能让特殊字符可选?

只是删除先行检查特殊字符:

^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)[A-Za-z\[email protected]$!%*?&]{8,}$ 

而且它是安全使用端锚$在你的正则表达式。

+0

@someangular:这工作了吗? – anubhava

相关问题