2014-03-28 79 views
1

我正在嘗試構建URL RegExp。該基地表達式如下:URL RegExp WITHOUT http://或www

/^(((http(?:s)?\:\/\/)|www\.)[a-zA-Z0-9\-]+(?:\.[a-zA-Z0-9\-]+)*\.[a-zA-Z]{2,6}(?:\/?|(?:\/[\w\-]+)*)(?:\/?|\/\w+((\.[a-zA-Z]{2,4})?)(?:\?[\w]+\=[\w\-]+)?)?(?:\&[\w]+\=[\w\-]+)*)$/ 

它看起來對我好,因爲符合這些:

http://gmail.com 
http://www.gmail.com 
www.gmail.com 

但我沃爾德想修改它來搭配這樣的:

gmail.com 

我會感謝任何幫助。

+0

在Javascript中? – Roberto

+0

如果你構建這樣的正則表達式,這將匹配'too.right'?雖然它不是一個URL ...你應該保留'http://'前綴。 – sp00m

+0

@ sp00m是的,你是對的!但是「too.right」比用戶「http://too.right」更適合用戶使用。我認爲現在看到這樣的符號是很常見的。 –

回答

3

只需添加一個?,使www可選的,那麼它將匹配gmail.com也

使用本:

^(((http(?:s)?\:\/\/)|www\.)?[a-zA-Z0-9\-]+(?:\.[a-zA-Z0-9\-]+)*\.[a-zA-Z]{2,6}(?:\/?|(?:\/[\w\-]+)*)(?:\/?|\/\w+((\.[a-zA-Z]{2,4})?)(?:\?[\w]+\=[\w\-]+)?)?(?:\&[\w]+\=[\w\-]+)*)$ 

,或者如果你想匹配gmail.comhttp://gmail.com在這種情況下使用:

^([a-zA-Z0-9\-]+(?:\.[a-zA-Z0-9\-]+)*\.[a-zA-Z]{2,6}(?:\/?|(?:\/[\w\-]+)*)(?:\/?|\/\w+((\.[a-zA-Z]{2,4})?)(?:\?[\w]+\=[\w\-]+)?)?(?:\&[\w]+\=[\w\-]+)*)$ 

請注意,這將匹配其中有點和字母的anu字符串。

IMO這將是最好使用正則表達式是這樣的:

^(http:\/\/|www\.)?[\w\.]+\.(com|net|co\.cc|co\.in)$ 

你可以根據自己的需要修改它。

點擊這裏,查看演示和玩的正則表達式:

http://regex101.com/r/tS4aB3

+0

非常感謝您的回答!我剛剛添加了一個'?'它似乎運作良好,預計有一個案例: www.gmail被視爲有效的電子郵件。有沒有可能將其視爲無效?這並不重要,但無論如何。 –

+0

只有當你有一個url擴展名列表,那麼只有我們可以將它們黑名單,因爲我已經在我的最後一個例子中做了 – aelor

+0

謝謝!我懂了! –

2

最簡單的方法是將'www'視爲另一個子域(因爲就是這樣)。

所以:

/^(((http(?:s)?\:\/\/))?([a-zA-Z0-9\-]+\.?)+(?:\.[a-zA-Z0-9\-]+)*\.[a-zA-Z]{2,6}(?:\/?|(?:\/[\w\-]+)*)(?:\/?|\/\w+((\.[a-zA-Z]{2,4})?)(?:\?[\w]+\=[\w\-]+)?)?(?:\&[\w]+\=[\w\-]+)*)$/ 

編輯:作爲一個側面說明,TLD(即 「.COM」 的一部分)是...相當複雜,這些天。有很多,他們可能不容易在2-6個字符。

+0

謝謝,它的工作!只是一個問題,我如何從有效的URL列表中排除www.gmail? –

相關問題