2016-11-28 52 views
3

我有一個HTML文本區域此正則表達式驗證表達式,以避免用戶鍵入電子郵件地址有:現正則表達式驗證器不允許返回

/.*^((?![a-zA-Z0-9_.+-][email protected][a-zA-Z0-9-]+\.[a-zA-Z0-9-.]+).)*$/ 

驗證器工作正常,但是,當了一回被輸入時,表達不會允許任何更多的文本。喜歡的東西:1

線在這裏(沒有電子郵件,所以都好)

[返回後不再允許輸入]

嘗試過研究,但找不到任何幫助,提前致謝!

+0

正則表達式並沒有多大意義,特別是開始'。* ^'。如果您使用的是javascript,則用'^ [\ s \ S] *'替換。無論如何,我的第一個猜測是'.'與換行符不匹配。 – HamZa

+0

實際上,'。* ^'部分總是匹配字符串的開頭。正則表達式匹配一個看起來不像電子郵件的字符串。如果錨符合線邊界,那麼它只會失敗(如果任何線類似於電子郵件)。請提供一些代碼。 –

+0

如果用戶添加一些間距或替換「@」,例如與'[at]'仍然可以輸入人類可讀的電子郵件地址... –

回答

0

使用

^((?![a-zA-Z0-9_.+-][email protected][a-zA-Z0-9-]+[.][a-zA-Z0-9-.]+)[\s\S])*$ 
                ^^^^^^ 

.不匹配換行符。

參見this JS fiddle

注意,回火貪婪令牌是一個消耗資源的模式,我寧願建議使用一個簡單的解決方案前瞻:

^(?![\s\S]*?[a-zA-Z0-9_.+-][email protected][a-zA-Z0-9-]+[.][a-zA-Z0-9-.]+)[\s\S]* 

this JS fiddle

這裏,^將斷言字符串的開始,(?![\s\S]*?[a-zA-Z0-9_.+-][email protected][a-zA-Z0-9-]+[.][a-zA-Z0-9-.]+)負先行將失敗的比賽一旦電子郵件般串在文本區域中找到,[\s\S]*將匹配整個內容(如果您的實現需要整個字符串匹配如果沒有 - 刪除它)。

+0

非常感謝!替換「。」通過「[\ s \ S]」)完成了這項工作。 – jrglayos

+0

很高興爲你工作。如果我的回答對你有幫助,請考慮upvoting(參見[如何在堆棧溢出?](http://meta.stackexchange.com/questions/173399/how-to-upvote-on-stack-overflow)) 。獲得15分後,您可以在SO上投票。 –