2011-03-17 66 views
2

在我的iPhone應用程序用戶可以輸入特定的IP地址/ URL來連接到他們自己的服務器,我試圖檢查輸入地址的有效性。因此,如果用戶輸入類似「1234」的內容,應用程序會發出錯誤信息,因爲它不會像「IP地址」或URL一樣「看起來」。 現在,我嘗試使用下面的方法來實現:iPhone SDK:如何檢查IP有效性?

- (BOOL)urlIsValid:(NSString *)address { 

NSString *urlRegEx = @"(http|https)://((\\w)*|([0-9]*)|([-|_])*)+([\\.|/]((\\w)*|([0-9]*)|([-|_])*))+"; 
NSPredicate *urlTest = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", urlRegEx]; 
return [urlTest evaluateWithObject:address]; 
} 

它我還以爲是工作得很好,但現在顯然即使我輸入正確的IP地址的方法將返回「NO 」。 關於什麼可能是錯誤的任何想法? 在此先感謝!

回答

1

閱讀Apple Docs
尤其是清單1中,其中代碼表示if (theConnection)

+0

並沒有真正提供任何幫助,因爲它沒有提供關於如何檢查輸入的IP地址符合一定的非標準任何文件... – Chris 2011-03-17 23:05:23

+0

對不起。我沒有完全明白你剛纔所說的。你的意思是**某些標準的IP地址。你能否舉一個例子來表明你認爲有效和無效的內容。
我只是假設你想檢查服務器的存在 – 2011-03-17 23:15:28

+0

那麼理論上用戶可以在提供的文本框中輸入任何東西作爲IP地址。因此用戶可以輸入完全隨機的內容,如「bla」或「$$」。在這種情況下,我需要一種方法來檢查輸入的文本是否實際上是IP地址的潛在候選者,然後我可以檢查地址後面是否有實際的服務器。我希望這更好理解。 – Chris 2011-03-17 23:34:01

0

使用NSPredicate這是矯枉過正,也不是真正它是什麼打算。您應該使用NSRegularExpression進行正則表達式匹配。但是,要完全驗證一個正則表達式的IP地址,至少可以說是很麻煩的。

0

我以這種方式驗證ip地址,嘗試添加http(s)前綴,所以它應該是工作。

NSString *urlRegEx = @"^([01]?\\d\\d?|2[0-4]\\d|25[0-5])\\.([01]?\\d\\d?|2[0-4]\\d|25[0-5])\\.([01]?\\d\\d?|2[0-4]\\d|25[0-5])\\.([01]?\\d\\d?|2[0-4]\\d|25[0-5])$"; 
NSPredicate *ipTest = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", urlRegEx]; 
return [ipTest evaluateWithObject:address]; 

好運