web-dev-qa-db-fra.com

jquery pour valider le numéro de téléphone

Je souhaite valider des numéros de téléphone tels que (123) 456-7890 ou 1234567890 Comment devrait être la condition de 'correspondances' être écrite dans le code suivant?

form.validate({

    rules: {

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

Votre regex devrait être quelque chose comme

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

Il fait correspondre les chiffres, les tirets, les parenthèses et les espaces.

Si vous avez besoin de quelque chose de plus strict, correspondant à votre exemple, essayez ceci:

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

22
Binary Brain

Votre code:

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

Il n'existe aucune fonction, option, méthode ou règle de rappel appelée matches dans le répertoire du plug-in jQuery Validate . (EDIT: OP n'a pas mentionné que matches est sa méthode personnalisée.)

Toutefois, dans le fichier additional-methods.js , vous pouvez utiliser plusieurs méthodes de validation du numéro de téléphone. Celui appelé phoneUS devrait satisfaire votre modèle. Étant donné que la règle valide déjà la longueur, minlength et maxlength sont superflus. C'est aussi beaucoup plus complet en ce que les indicatifs régionaux et les préfixes ne peuvent pas commencer par un 1.

rules: {
    phoneNumber: {
        phoneUS: true
    }
}

DEMO: http://jsfiddle.net/eWhkv/


Si, pour une raison quelconque, vous avez simplement besoin de la regex pour l'utiliser avec une autre méthode, vous pouvez la prendre à partir d'ici ...

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})/

Les soutiens :

  • (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;
    }
}

Demohttp://jsfiddle.net/dishantd/JLJMW/496/

11
Dishan TD
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
        }
    }

Je sais que ceci est un ancien post, mais je pensais partager ma solution pour aider les autres.

Cette fonction fonctionnera si vous souhaitez valider un numéro de téléphone à 10 chiffres "Numéro américain".

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

Voici comment utiliser cette méthode

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
Mike A

Celui-ci est un travail pour moi: -

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