web-dev-qa-db-ja.com

電話番号を検証するjquery

(123)456-7890や1234567890のような電話番号を検証したいのですが、次のコードで「一致」条件を記述する方法

form.validate({

    rules: {

       phoneNumber: {matches:"[0-9]+",minlength:10, maxlength:10}
18
FlintOff

あなたの正規表現は

[0-9\-\(\)\s]+

数字、ダッシュ、括弧、スペースに一致します。

あなたの例と一致するより厳密な何かが必要な場合は、これを試してください:

([0-9]{10})|(\([0-9]{3}\)\s+[0-9]{3}\-[0-9]{4})

23
Binary Brain

あなたのコード:

rules: {
    phoneNumber: {
        matches: "[0-9]+",  // <-- no such method called "matches"!
        minlength:10,
        maxlength:10
    }
}

jQuery Validate plugin .内のどこにもmatchesと呼ばれるコールバック関数、オプション、メソッド、またはルールはありません。編集:OPはmatchesが彼のカスタムメソッドであることに言及できませんでした。

ただし、 additional-methods.js file 内には、使用できる電話番号検証方法がいくつかあります。 phoneUSと呼ばれるものは、パターンを満たす必要があります。ルールはすでに長さを検証しているため、minlengthmaxlengthは重複して不要です。また、市外局番とプレフィックスが1で始まることができないという点で、より包括的です。

rules: {
    phoneNumber: {
        phoneUS: true
    }
}

デモ: http://jsfiddle.net/eWhkv/


何らかの理由で、別のメソッドで使用するために正規表現が必要な場合は、ここから取得できます...

jQuery.validator.addMethod("phoneUS", function(phone_number, element) {
    phone_number = phone_number.replace(/\s+/g, "");
    return this.optional(element) || phone_number.length > 9 && 
    phone_number.match(/^(\+?1-?)?(\([2-9]\d{2}\)|[2-9]\d{2})-?[2-9]\d{2}-?\d{4}$/);
}, "Please specify a valid phone number");
19
Sparky
/\(?([0-9]{3})\)?([ .-]?)([0-9]{3})\2([0-9]{4})/

サポート:

  • (123)456 7899
  • (123).456.7899
  • (123)-456-7899
  • 123-456-7899
  • 123 456 7899
  • 1234567899
15
user2957312
function validatePhone(txtPhone) {
    var a = document.getElementById(txtPhone).value;
    var filter = /^((\+[1-9]{1,4}[ \-]*)|(\([0-9]{2,3}\)[ \-]*)|([0-9]{2,4})[ \-]*)*?[0-9]{3,4}?[ \-]*[0-9]{3,4}?$/;
    if (filter.test(a)) {
        return true;
    }
    else {
        return false;
    }
}

デモhttp://jsfiddle.net/dishantd/JLJMW/496/

11
Dishan TD

最初にデータを正規化すると、電話番号の検証に必要な非常に複雑な正規表現をすべて回避できます。私の経験から、複雑な正規表現パターンには、2つの望ましくない副作用があります。(1)後でデバッグするのが苦痛になるような予期しない動作が発生する可能性があります。ループで正規表現を実行しています。

正規表現を可能な限りシンプルに保つことにより、これらのリスクを軽減し、コードがより予測しやすくなるため、他の人がコードを追跡しやすくなります。電話番号の例を使用するには、まず、次のようにすべての非数字を取り除くことで値を正規化できます。

value = $.trim(value).replace(/\D/g, '');

これで、米国の電話番号(またはその他のロケール)の正規表現パターンがはるかに簡単になります。

_/^1?\d{10}$/_

正規表現がはるかに単純であるだけでなく、何が起こっているのかを追跡するのも簡単です。オプションで先頭に数字の1(米国の国コード)があり、その後に10桁が続きます。検証済みの値を整形して見栄えを良くしたい場合は、この少し長い正規表現パターンを使用できます。

/^1?(\d{3})(\d{3})(\d{4})$/

これは、オプションの先行番号1の後に3桁、さらに3桁が続き、4桁で終わることを意味します。数字の各グループを記憶しておくと、好きなように出力できます。 2つのロケール(シンガポールと米国)でこれを示すためにjQuery Validationを使用するコードペンを次に示します。

http://codepen.io/thdoan/pen/MaMqvZ

4
thdoan
jQuery.validator.methods.matches = function( value, element, params ) {
    var re = new RegExp(params);
    // window.console.log(re);
    // window.console.log(value);
    // window.console.log(re.test( value ));
    return this.optional( element ) || re.test( value );
}

rules: {
        input_telf: {
            required  : true,
            matches   : "^(\\d|\\s)+$",
            minlength : 10,
            maxlength : 20
        }
    }

私はこれが古い投稿であることを知っていますが、他の人を助けるために自分のソリューションを共有すると思いました。

この機能は、10桁の電話番号「US番号」を有効にする場合に機能します

function getValidNumber(value)
{
    value = $.trim(value).replace(/\D/g, '');

    if (value.substring(0, 1) == '1') {
        value = value.substring(1);
    }

    if (value.length == 10) {

        return value;
    }

    return false;
}

ここでこの方法の使用方法

var num = getValidNumber('(123) 456-7890');
if(num !== false){
     alert('The valid number is: ' + num);
} else {
     alert('The number you passed is not a valid US phone number');
}
1
Junior

これは私のための仕事です:-

/^\(?(\d{3})\)?[-\. ]?(\d{3})[-\. ]?(\d{4})$/
1
vineet