2017-01-26 173 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

相關問題