2010-09-11 9 views
3

J'utilise ceci:Jquery validate: Regexing un non-US phonenumber

jQuery.validator.addMethod("regex2", function(value, element, param) { 
    return value.match(new RegExp("." + param + "$")); 
}); 

$("#phonenumber").rules("add", { regex2: "[0-9]+"}) 

pour valider un téléphone. Le numéro de téléphone doit être au moins de 7 chiffres, j'ai reçu cette regex de elsewhere et j'utilise le paramètre minlength=7, mais cela est évidemment inadapté. Comment cette validation devrait-elle être faite?

Je vis au Venezuela. Je pense donc this is useless. Comment puis-je le changer? Dans mon pays 0416-414 33 44 devrait être considéré comme une entrée valide pour un numéro de téléphone.

+0

Est-ce qu'il doit y avoir un espace vide à la fin ou est-ce facultatif? Est-ce que ce doit être exactement un espace ou peut-il en avoir plus d'un? Est-ce que ce doit être un caractère espace (U + 0020) ou pourrait-il y avoir des espaces? –

+0

il ne doit pas être l'espace, je modifie la question pour répondre à la réponse d'alcuadrado, car il semble la meilleure solution. – andandandand

Répondre

2

Vous pouvez trouver les regex utiles, il essentiellement premières suivantes bandes tous les caractères spéciaux valides qui un numéro de téléphone partout dans le monde peut contenir (espaces, parens, +, -, ., ext) et compte les chiffres s'il sont au moins 7.

$.validator.addMethod('phone', function(value, element) { 
    return this.optional(element) || (/^\d{7,}$/).test(value.replace(/[\s()+\-\.]|ext/gi, '')); 
}); 

Utilisez-le avec <input class="phone">.

2

Tu ne peux pas la première assiette et puis validez, ou tout simplement ajouter un \s? avant la $ dans cette ligne:

return value.match(new RegExp("." + param + "$")); 

Modifier le? pour * d'accepter plus d'un blanc

+0

'\ b' signifie limite de mot, pas vide. –

+0

Vous avez raison, je veux dire – alcuadrado

+0

en fait, le découpage semble le meilleur choix. Je veux accepter des caractères comme - et un espace vide pour que l'utilisateur écrive mais ne les compte pas comme des chiffres, car j'ai besoin d'au moins 7 chiffres dans le téléphone. – andandandand

3

En supposant:

  • Le caractère espace peut être un espace.
  • L'espace est facultatif.
  • Il peut y avoir plus d'un espace.
  • Il doit y avoir au moins sept chiffres.

Ensuite, remplacez "[0-9]+" par "[0-9]{7,}\s*$". Il semble également que le "." est incorrect et devrait être un "^".

+0

problème ici est qu'il tue la validation. il comptera les espaces comme des chiffres, un utilisateur peut mettre seulement des espaces vides sur le champ de téléphone. – andandandand

2

Êtes-vous sûr de ce . à l'avant de la regex? Je me demande si cela est censé être un signe ^ qui est la contrepartie de $: il ancre l'expression rationnelle de sorte que la chaîne entière doit correspondre à la regex.

Vous pouvez ajouter des espaces à la regex, mais une solution plus élégante consisterait à la découper en premier. Couper une chaîne supprime les espaces du début et de la fin. Chacun de ces programmes fonctionneront:

// Trim value before matching against regex. 
return jQuery.trim(value).match(new RegExp("^" + param + "$")); 

// Allow spaces at beginning or end with " *" (space + asterisk). 
return value.match(new RegExp("^ *" + param + " *$")); 

En outre, pendant que nous y sommes, vous pouvez faire un peu plus robuste en ajoutant des parenthèses autour param.

// Add parentheses for robustness. 
return jQuery.trim(value).match(new RegExp("^(?:" + param + ")$")); 

De cette façon, votre nouvelle regex fonctionnera même si param est, par exemple, this|that. Vous voudriez faire correspondre ^(this|that)$ plutôt que ^this|that$, puisque ce dernier serait équivalent au (^this)|(that$) incorrect.

+0

C'était utile et éclairant. J'ai fini par l'utiliser ailleurs. Merci. – andandandand

Questions connexes