2012-04-01 68 views
0

我有一個字段,人們輸入他們的IP。所以我嘗試使用jquery驗證該字段:與ip和http jQuery驗證

$.validator.addMethod("http-ipvalidation", 
    function(value, element) { 
     return /^[\d.]+$/.test(value); 
    }, 
    "Sorry, only numbers and dots allowed here" 
); 

但有些人正在使用DynDNS,然後可以使用url。所以現在我需要允許兩個。有沒有辦法將默認的jQuery URL驗證和我的自定義IP驗證結合起來?

我可能會改變jQuery的URL檢查,但這個表達式是瘋了,所以我不知道從哪裏開始:

return /^(https?|ftp):\/\/(((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:)*@)?(((\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5]))|((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.?)(:\d*)?)(\/((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)+(\/(([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)*)*)?)?(\?((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)|[\uE000-\uF8FF]|\/|\?)*)?(\#((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)|\/|\?)*)?$/i.test(val); 

另外,我認爲這將是很好,讓人們沒有http(s)://作爲進入一部分。因此,要總結,我想創建驗證,用戶可以輸入:

12.34.56.78my.domain.comhttp://my.domain.com

也許,我應該只需要一個簡單的驗證採取了一些特殊的字符,並留在這一點?提前致謝。

回答

1

我推薦幾乎沒有做任何事來驗證這個領域; IDN意味着用戶可以合法地輸入幾乎任何東西到現場:█▄ִ█▄█ִ▀▄▀。tk(當前是域名搶注者)或█ִ̅̅̅bִִִִִ̅̅̅̅̅̅̅̅̅̅̅d██。tk(一個編目IDN域名的網站)或其他可怕的大多數瀏覽器都可以將它們視爲合法地址,然後將它們轉換爲其後臺ASCII對應的地址。

0

這是UI開發人員我(和你,聽起來像)真正進入計算機科學樂趣的地方。你可能只是看幾個小時的正則表達式學習,並且你將在你的職業生涯中使用正則表達式。

我認爲最簡單的方式做這將是兩個通道:

  1. 確定它們是否已輸入網址或IP地址。確定它是一個IP應該很容易。也許你會去掉所有的「。」,然後檢查以確保只有數字。
  2. 根據步驟1的結果運行IP地址或網址驗證。正如SArnold所說,您可能沒有太多可以驗證的網址,但您可以通過這種方式爲其設置http://可選參數。

資源: http://www.regular-expressions.info/javascript.html http://txt2re.com/

0

這可能是迴避問題的一點點,但我可能會推遲它像平,捲曲或NSLOOKUP一個UNIX程序。我不知道是否因爲其他原因想要這樣做,但我認爲它會起作用。

$.validator.addMethod("http-ipvalidation", 
    function(value, element) { 
     result = false 
     $.getJSON({async:false,url:verify.php,success:function(resp){result=resp.result}}) 
     return result; 
    }, 
    "Sorry, ip address invalid" 
); 

而且在verify.php你會碰到這樣的:Ping site and return result in PHP

$ch = curl_init($url); 
curl_setopt($ch, CURLOPT_TIMEOUT, 5); 
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 5); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
$data = curl_exec($ch); 
$httpcode = curl_getinfo($ch, CURLINFO_HTTP_CODE); 
curl_close($ch); 
if($httpcode>=200 && $httpcode<300) { 
    return true; 
} else { 
    return false; 
} 

所以這樣它拋出一個錯誤,他們正在進入的IP地址是否是無效的,或者如果它不是真正的IP地址。我不知道這是否是你想要的行爲。