0

jquery スクリプトを使用してフォーム フィールドを検証しています。これはうまく機能しますが、1 つのフィールドの検証を変更して、IP アドレスを確認したいと考えています。

使用したい正規表現は次のとおりです。

\b(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\b

これで動作するように以下を修正するにはどうすればよいですか? (これは、電子メール アドレスの検証のしくみです)

jQuery("#Email").validate({
                expression: "if (VAL.match(/^[^\\W][a-zA-Z0-9\\_\\-\\.]+([a-zA-Z0-9\\_\\-\\.]+)*\\@[a-zA-Z0-9_]+(\\.[a-zA-Z0-9_]+)*\\.[a-zA-Z]{2,4}$/)) return true; else return false;",
                message: "Should be a valid Email id"
            });
4

2 に答える 2

1

「\」文字は JavaScript ではエスケープ文字と見なされ、「\」文字として文字通り解釈されるように 2 つにする必要があります。引用符もエスケープする必要がありますが、存在しないようです。

正規表現に適用すると、次のようになります。

\\b(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\b

コードのコンテキストでは、次のようになります。

jQuery("#Email").validate({
    expression: "if (VAL.match(/^\\b(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\b$/)) return true; else return false;",
    message: "Should be a valid Email id"
 });

最初に「^」、最後に「$」を残したことに注意してください。これは、文字列全体が正規表現と一致することを意味します。そうでない場合は、それらを削除する必要があります。その正規表現が希望どおりに機能するかどうかはテストしていませんが、そうでない場合は、上記のルールを適用して上記のコードに挿入できるはずです。

編集: ユーザーが IP を試みたが失敗したかどうか、またはそれがまったく別のものであるかどうかを判断するなど、より高度なチェックを行う場合は、式コードを次のように変更できます。

function isValidInput(str) {
    if (str.match(/^\b(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\b$/)) {
        return true; 
    } else if (str.match(/[0-9]+(\.[0-9]+){2,}/)) {
        return false;
    } else { 
        return true;
    }
}
jQuery("#Email").validate({
    expression: "isValidInput(VAL)",
    message: "Should be a valid Email id"
});

式が既存の関数「isValidInput」を呼び出すようになったことに注意してください。その結果、コードは評価文字列ではなくなり、すべてのエスケープが削除されました。<number>.<number>.<number>+2 番目の一致は、誰かが有効な IP を挿入しようとしているのを捕まえるためにチェックします (しかし、どうやらあまりうまくいっていないようです)。それが役立つことを願っています!

于 2012-10-02T12:24:22.030 に答える
0

正規表現が IP アドレスに対して機能すると仮定し、IP アドレスの入力が real であると仮定するとid="Email"、これは機能するはずです。

jQuery("#Email").validate({
    expression: "return (VAL.match(/^[^\\W][a-zA-Z0-9\\_\\-\\.]+([a-zA-Z0-9\\_\\-\\.]+)*\\@[a-zA-Z0-9_]+(\\.[a-zA-Z0-9_]+)*\\.[a-zA-Z]{2,4}$/));",
    message: "Should be a valid Email id"
});
于 2012-10-02T12:22:46.093 に答える