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}
9 answers
O seu regex deve ser algo como
[0-9\-\(\)\s]+
.
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})
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.)
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");
/\(?([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
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/
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):
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
}
}
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');
}
/^\(?(\d{3})\)?[-\. ]?(\d{3})[-\. ]?(\d{4})$/
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()]*$