2013-07-23 164 views
0

下面的表達式有一個問題。我想用下面的正則表達式來做URL驗證:避免空格的正則表達式

^http(s?):\/\/(\w+\.)?[\w%\-\.$,@?^=%&:\/~\+#]+\.[\w\.$,@?^=%&:\/~\+#]+|(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}+\/$ 

上述表達式允許的IP地址以及http/https:。它接受URL之間的空格。 (http://example.com)。如何限制上述表達式中的空格?

+2

你能舉一個例子,說明不應該這樣做嗎? –

+0

你是什麼意思,它接受URL之間的空格,如'http:// example.com'?我在那裏看不到空間。 – sawa

+0

hello sawa,對不起,我忘了在url之間添加空格eg(www.goog le.co m) –

回答

0

只需添加在$(需要行結束)到你的第一個條件:

^http(s?):\/\/(\w+\.)?[\w%\-\.$,@?^=%&:\/~\+#]+\.[\w\.$,@?^=%&:\/~\+#]+$|(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}+\/$ 
    ------Add in $ here---------------------------------------------------------^ 

Example

雖這麼說,還有的已經內置模塊是非常在解析和驗證URI時,好的。我建議使用其中之一。

+0

感謝Mike Christensen對我的工作。 –

+0

邁克你能不能請建議我,域名允許哪些特殊字符。例如(www.ex $ am%ple.com)。 –

+0

我想限制域部分中的特殊字符。 –

4

不要。這不適合使用正則表達式,並且您將永不爲所有可能的URLs正確使用。使用URI module實際解析URL,並捕獲它會引發的異常,如果您爲其提供了無效的URL。

require 'URI' 

URI("http://google.com") # => #<URI::HTTP:0x007fb08500d3a8 URL:http://google.com> 
URI("http://a b") # URI::InvalidURIError: bad URI(is not URI?): http://a b 
+0

Okey謝謝meagar。我會嘗試通過URI模塊。 –