jquery para validar o número de telefone

quero validar números de telefone como (123) 456-7890 ou 1234567890 Como deve ser a condição "fósforos" escrito no seguinte código?

form.validate({

    rules: {

       phoneNumber: {matches:"[0-9]+",minlength:10, maxlength:10}
Author: FlintOff, 2013-11-07

9 answers

O seu regex deve ser algo como

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

Corresponde a números, traços, parêntesis e espaço.

Se precisar de algo mais rigoroso, correspondente apenas ao seu exemplo, tente isto:

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

 16
Author: Binary Brain, 2013-11-07 15:55:33

O seu código:

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

Não existe tal função de resposta, opção, método ou regra chamada matches em qualquer lugar dentro de o 'plugin' de validação jQuery. (EDIT: o OP não mencionou que matches é o seu método personalizado.)

No entanto, dentro do ficheiro additional-methods.js , existem vários métodos de validação de números de telefone que pode usar. O que se chama {[6] } Deve satisfazer o teu padrão. Uma vez que a regra já valida o comprimento, minlength e maxlength são redundantemente desnecessário. Também é muito mais abrangente nessa área códigos e prefixos não podem começar com um 1.
rules: {
    phoneNumber: {
        phoneUS: true
    }
}

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


Se, por alguma razão, só precisar da expressão regular para usar noutro método, pode continuar a partir daqui...

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");
 17
Author: Sparky, 2013-11-07 16:34:33
/\(?([0-9]{3})\)?([ .-]?)([0-9]{3})\2([0-9]{4})/

Suporte:

  • (123) 456 7899
  • (123).456.7899
  • (123)-456-7899
  • 123-456-7899
  • 123 456 7899
  • 1234567899
 15
Author: , 2013-11-07 16:04:44
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;
    }
}

Demonstração http://jsfiddle.net/dishantd/JLJMW/496/

 11
Author: Dishan TD, 2014-03-17 05:41:17

Se você normalizar seus dados primeiro, então você pode evitar todas as expressões regulares muito complexas necessárias para validar números de telefone. A partir de minha experiência, padrões complicados de expressão regular podem ter dois efeitos colaterais indesejados: (1) Eles podem ter um comportamento inesperado que seria uma dor para depurar mais tarde, e (2) eles podem ser mais lentos do que padrões mais simples de expressão regular, que podem se tornar perceptíveis quando você está executando a expressão regular em um loop.

Ao manter as suas expressões regulares o mais simples possível, reduza estes riscos e o seu código será mais fácil para os outros seguirem, em parte porque será mais previsível. Para usar o exemplo do seu número de telefone, Primeiro podemos normalizar o valor removendo todos os não-dígitos como este:

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

Agora o seu padrão regex para um número de telefone dos EUA (ou qualquer outro local) pode ser muito mais simples:

/^1?\d{10}$/

Não só a expressão regular é muito mais simples, como também é mais fácil seguir o que está a acontecer: um valor que opcionalmente lidera com número um (código do país dos EUA) seguido de dez dígitos. Se você quiser formatar o valor validado para torná - lo bonito, então você pode usar este padrão regex um pouco mais longo:

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

Isto significa um número um opcional seguido de três dígitos, outros três dígitos e terminando com quatro dígitos. Com cada grupo de números memorizados, você pode obtê-lo como quiser. Aqui está um codepen usando validação jQuery para ilustrar isso para dois locais (Singapura e US):

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

 3
Author: thdoan, 2015-11-27 10:15:44
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
        }
    }
 2
Author: Alfredo González Portero, 2016-12-04 12:53:08
Sei que este é um post antigo, mas pensei em partilhar a minha solução para ajudar os outros.

Esta função irá funcionar se quiser um número de telefone válido de 10 dígitos"US number"

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

Como utilizar este método

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
Author: Mike A, 2016-02-11 19:40:40
Este é trabalho para mim.
/^\(?(\d{3})\)?[-\. ]?(\d{3})[-\. ]?(\d{4})$/
 0
Author: vineet, 2016-10-09 11:55:49

Você sabe que existem muitos formatos de números de telefone neste mundo para que você possa usar este regex para validar qualquer número de telefone^[0-9-+s()]*$

 -1
Author: AR AS, 2018-08-29 19:52:56