2014-10-01 37 views
1

我一直在學習一些正則表達式,因爲我試圖創建一個驗證正確的網站,不允許空白字段。正則表達式 - 保持匹配只有空白 - 使用ASP.NET RegularExpressionValidator

我目前有:

^((http|https|ftp)\://)?(www\.[a-zA-Z0-9\-\.]+\.[a-zA-Z]{2,3}(:[a-zA-Z0-9]*)?/?([a-zA-Z0-9\-\._\?\,\'/\\\+&%\$#\=~])*[^\.\,\)\(\s])$

「www.google.com」 PASS

「www.goo gle.com」 FAIL

「www.google.com」 FAIL

但是

「」PASS

我認爲通過添加'只以http | https | ftp開頭'這將確保空白不會發生,甚至前綴[^\s] - 但無濟於事。

如果它有幫助我正在使用ASP.NET WebForms RegularExpressionValidator控件。

+0

你的正則表達式是正確的,它不會允許空白字符。見http://regex101.com/r/dZ1vT6/8 – 2014-10-01 15:11:38

+0

但你知道爲什麼ASP控制允許一個空格? 我以爲這可能是正則表達式檢查器不啓動,如果它只是注意到空白空間,但它是我需要包括編輯的要求:不用擔心 – 2014-10-01 15:15:41

回答

0

你的正則表達式也將失敗的域名命名的網站,例如像http://stackoverflow.com

而且,我看到它有點過於複雜。由於有效的主機/域名只能包含數字,字母和連字符(後者只有通過數字或字母...包圍),你可以在你的正則表達式更改爲:

^(?:[a-zA-Z0-9]+[-]*[a-zA-Z0-9]+)(?:[.][a-zA-Z0-9]+[-]*[a-zA-Z0-9]+)+$ 

我不會檢查協議,但如果你需要在這裏是完整的正則表達式:

^(?:(?:http|https|ftp)\://)?(?:[a-zA-Z0-9]+[-]*[a-zA-Z0-9]+)(?:[.][a-zA-Z0-9]+[-]*[a-zA-Z0-9]+)+$ 

http://regex101.com/r/pP0iG6/1

相反,由於路徑可以包含幾乎所有的東西(*),在我看來,以驗證它是發出HEAD的唯一途徑並查看服務器的響應代碼。

+0

(*)這不是真的,有一個有效字符集:http://tools.ietf.org/html/rfc3986#section-2然而,你可以看看這個答案的URI部分更好的正則表達式http://stackoverflow.com/a/1547940/384630 – spider 2014-10-01 15:47:03

0

編輯:我已經找到了MS RegularExpressionValidator控件看到純白色空間作爲一個空字符串,並驗證不啓動,直到插入非空白字符。有點煩人,但據說只是增加一個RequiredFieldValidator會做這項工作(對任何感興趣的人)RegularExpressionValidator不射擊空白條目

編輯2:對於其他人在我的情況下,RequiredFieldValidator是無用的,因爲我不希望該字段是強制性的,我只是希望它不包含空格!不知道爲什麼微軟不會在RegEx上驗證空白區域,而是必須採用服務器端的簡單.Trim方法。