2012-04-01 6 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" 
); 

しかし、一部の人々は、URLを使用することができますダイナミックDNSを使用しています。だから私は両方を許可する必要があります。デフォルトの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.78またはmy.domain.comまたはhttp://my.domain.com

を多分、私はいくつかの特殊文字を取り出し、そのままにしておくために簡単な検証を取る必要がありますか?前もって感謝します。

答えて

1

このフィールドの検証にはほとんど何もしないことをおすすめします。 IDNは、ユーザーが合法的にフィールドに何かを正当に入力できることを意味します:█▄ִ█▄█ִ▀▄▀。tk(現在はドメインスクウター)または他の恐ろしいWebサイト(いくつかのIDNドメイン名をカタログ化しているウェブサイト)ほとんどのブラウザが背後にあるASCII対応のものに変わる可能性のある、見通しの良い正式なアドレスです。

0

これは、UI開発者が実際に楽しいコンピュータサイエンスのものになる(そしてあなたのように聞こえる)場所です。あなたはたぶん、数時間の正規表現の学習だけを見ているでしょうし、あなたは残りのあなたのキャリアのために正規表現を使用します。

私はこれを行うための最も簡単な方法は、2回のパスであることだと思う:

  1. は、彼らがURLまたはIPアドレスを入力したかどうかを確認します。 IPであることはかなり簡単に判断できるはずです。たぶん、すべての "。"を取り除いてから、数字だけがあることを確認してください。
  2. 手順1の結果に基づいて、IPアドレスまたはURLの検証を実行します.SArnoldによれば、URLの検証はほとんどできませんが、このようにhttp://オプションを作成できます。

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

0

これが問題少しsidesteppingされるかもしれないが、私はおそらくピング、カールや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:だからこの方法は、それは彼らが入力しているIPアドレスが無効であるか、それはだかのかどうか、エラーがスローされます

$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; 
} 

Ping site and return result in PHP実際のIPアドレスではありません。これがあなたが望む行動かどうかは分かりません。