2016-03-07 75 views
0

我發現這個網站: https://mathiasbynens.be/demo/url-regex 並希望用於我的URL驗證從@diegoperini的正則表達式,因爲根據該網站頂部提供的表,它是最好的正則表達式。錯誤的正則表達式

當我嘗試使用它時,出現範圍值錯誤。

P.S.我使用正則表達式如下表達:

_^(?:(?:https?|ftp):\/\/)(?:\S+(?::\S*)[email protected])?(?:(?!10(?:\.\d{1,3}){3})(?!127(?:\.\d{1,3}){3})(?!169\.254(?:\.\d{1,3}){2})(?!192\.168(?:\.\d{1,3}){2})(?!172\.(?:1[6-9]|2\d|3[0-1])(?:\.\d{1,3}){2})(?:[1-9]\d?|1\d\d|2[01]\d|22[0-3])(?:\.(?:1?\d{1,2}|2[0-4]\d|25[0-5])){2}(?:\.(?:[1-9]\d?|1\d\d|2[0-4]\d|25[0-4]))|(?:(?:[a-z\x{00a1}-\x{ffff}0-9]+-?)*[a-z\x{00a1}-\x{ffff}0-9]+)(?:\.(?:[a-z\x{00a1}-\x{ffff}0-9]+-?)*[a-z\x{00a1}-\x{ffff}0-9]+)*(?:\.(?:[a-z\x{00a1}-\x{ffff}]{2,})))(?::\d{2,5})?(?:\/[^\s]*)?$_iuS 

和下面的在線驗證: http://regexr.com/

它確實顯示在正則表達式錯誤的地方,但我不知道如何去管理它。我試圖交換這兩個範圍,但它沒有辦法。

我將不勝感激。

P. P. S. 我在AngularJS指令中使用正則表達式來驗證url輸入。

+0

什麼是你的正則表達式? (你所在的語言) –

+0

Javascript中,我嘗試在angularJS指令中使用它 –

回答

0

您的字符類內埋,你有這樣的範圍:

\x{00a1}-\x{ffff} 

但它應該是:

\u00a1-\uffff 

你表達\x{00a1}-\x{ffff}不是一個十六進制編碼或字符和正確的語法as-is表示「x {} 0a1f」加上範圍「} -x」中的任何一個,但是「x」是小於「}」的,因此引發錯誤。

+0

在JS中'\ x'需要2位十六進制代碼,而不是4'。\ xffff'匹配'\ xff'和2'f'秒。 –

+0

@WiktorStribiżew感謝您的信息。我已將修改建議更改爲'\ u' – Bohemian

+0

不知何故,我無法得到正在運行的那些正則表達式(來自所提供的鏈接)。可能它們都是爲了php,而不是爲了js。我將使用標準的角度URL驗證。 –