2012-01-11 56 views
0

我有這種圖案存儲在一個變量:RegEx Javascript - 我做錯了什麼?

var regexServer = /^([0-9]{2,3})+\.([0-9]{2,3})+\.([0-9]{2,3})+\.([0-9]{2,3})+\:[0-9]{2,4}$/; 

if(!stringFromArgument.match(regexServer)) 
    alert("You must input a valid IP and a Port address! Eg: 66.77.88.99:8000"); 

我檢查從輸入(形式)來的字符串,它的確定。

如果有人想添加自己的IP和端口地址,他必須添加一個有效的表單。他的字符串只能包含.,:,數字和空格。

我在做什麼錯?

+1

取決於。發生了什麼? – 2012-01-11 13:32:04

+1

請提供您使用的示例輸入失敗 – 2012-01-11 13:32:37

+2

請注意,在IP地址中只有一個數字是完全正常的,例如, '66.77.88.1'。你的'{2,3}'條款限制性太強。 – 2012-01-11 13:34:06

回答

0

首先,如果您只是測試,則無需放置(…)+。 你也已經第3和第4號限於2+,但可能低於10號碼以及端口可能會大於9999

var regexServer = /^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\:[0-9]{2,4}$/ 

而且,這種正則表達式只檢查是否正確的格式,但不驗證ip(檢查數字是否在0-255之間)。這裏有更多的正則表達式(沒有端口檢查,你可以自己添加它):

var regexServer = /^(([2]([0-4][0-9]|[5][0-5])|[0-1]?[0-9]?[0-9])[.]){3}(([2]([0-4][0-9]|[5][0-5])|[0-1]?[0-9]?[0-9]))$/ 
1

你的問題是什麼?

我看到兩件事情

/^([0-9]{2,3})+\.([0-9]{2,3})+\.([0-9]{2,3})+\.([0-9]{2,3})+\:[0-9]{2,4}$/ 
      ^   ^   ^   ^
                  ^
  • 在我的標誌第一排的量詞是錯誤的。
  • 由於「:」不是特殊字符,所以不需要在第二行標出轉義字符。
+0

感謝您的回覆! 我完全糊塗了...我從一開始就開始了一切,我試過這個: var regexServer =/^ [0-9] \。[0-9] \。[0-9] \。 [0-9]:[0-9] $ /; 我只想讓正確的IP和端口addresse的像這樣的: 88.77.66.55:8000 對不起,我的英語,但我的膝蓋了一個箭頭...... – 2012-01-11 23:00:34

1

您接受IP號碼從10到255,也許你應該改變從{2,3}的量詞{1,3},否則IP地址就像128.0.0.1:80將被拒絕。

1

我認爲你的RegExp不能正常工作,因爲+字符。

這應該工作,在我看來更有效的正則表達式:/^([0-9]{1,3}(\.?)){4}:[0-9]{2,5}$/

您應該允許每個級別1號。例如:如果沒有,82.176.103.6不匹配。此外,端口號的數量應爲5,因爲最高端口號是65535

+1

+1但是'^((\ d {1,3})[\ .:] {4} \ d {2,5} $'可能會更好,因爲當前正則表達式也匹配'66.778899:8000' – noob 2012-01-11 13:46:56

+0

@micha非常好點,+1!但是,您的查詢也會匹配'11:22:33:44';) – 2012-01-12 10:12:19