2017-01-12 71 views
0

我需要的正則表達式的Javascript正則表達式自定義驗證

1)[A-Z][a-z][0-9]必須包括大寫&小寫字母,數字&特殊字符(除+和 - )。

2)序列中不超過2個相同的字符(例如,[email protected][email protected]Google#12是不可接受的)。

我試過這個,但不知道如何檢查2個相同的字符。

^(?=.*[0-9])(?=.*[a-z])(?=.*[A-Z])(?=.*[@#$%^%*()!&=]).*$ 
+0

你能告訴我們你到目前爲止嘗試過嗎? –

+0

第一個條件聽起來好像你想在你的輸入中允許任何字符,但是'+'和'-'。 –

+0

@WiktorStribiżew+和_不允許 – user3747168

回答

1

你可以加一個額外的(?!.*(.)\1)先行檢查,不允許連續的字符,並在與[^_+]*(或[^-+]*如果你的意思是連字符)結束時替換.*匹配任何字符,但_(或-)和+

^(?!.*(.)\1)(?=.*[0-9])(?=.*[a-z])(?=.*[A-Z])(?=.*[@#$%^*()!&=])[^_+]*$ 
    ^^^^^^^^^^             ^^^^^ 

(?!.*(.)\1) lookahead匹配除換行符之外的任何0+字符,然後逐個捕獲這些字符並嘗試匹配緊跟在後面的相同字符(使用\1反向引用)。如果發現該模式,則整個比賽失敗。

請注意,[^_+]也可能符合換行符,但我想這不是問題。無論如何,你可以在那裏添加\n\r以避免匹配它們。

看到regex demo

+0

試試'(?!。*(。)\ 1。*(。)\ 2)'。注意這會使性能變差。 –