Qu'est-ce que c'est encore que cette bête ?... En fait, un moyen simple, même si parfois obscur au premier abord, pour faire des recherches d'occurences dans une chaîne... Exemple :
Pour vérifier la validité de structure d'une adresse email saisie dans un formulaire :
function verif(email) { // vérif validité email par STRING var arobase = email.indexOf("@") var point = email.lastIndexOf(".") if((arobase < 3)||(point + 2 > email.length) ||(point < arobase+3)) return false return true }
function verif(email) { // vérif validité email par REGEXP var reg = /^[a-z0-9._-]+@[a-z0-9.-]{2,}[.][a-z]{2,3}$/ return (reg.exec(email)!=null) }
Evidemment comme ça, à froid, c'est illisible... alors détails :
var reg = /blablabla/ définit un masque de recherche
reg.exec(votrechaîne) cherche les occurences du masque dans votre chaîne et retourne ce qui a été trouvé ou null
"blablabla" enfin se décompose dans notre exemple de la manière suivante :
^ : depuis le début de la chaîne
[a-z0-9.-_]+ : cherche au moins 1 caractère spécifié (de "a" à "z" ou "0" à "9" ou "." ou "-" ou "_")
@ : suivis de l'arobase
[a-z0-9]{2,} : suivis d'au-moins 2 caractères spécifiés (de "a" à "z" ou "0" à "9")
[.] : suivis d'un point (entre crochets car spécial dans regexp)
[a-z]{2,3} : suivis de 2 à 3 caractères spécifiés (de "a" à "z")
$ : et la chaîne doit être terminée
Note : + signifie "au moins 1 fois le caractère précédent" équivalent à {1,}
Du coup vous voyez qu'il est facile de tester si l'internaute a bien tapé...
un nombre entier : var reg = /^\d+$/ ( \d équivaut à [0-9] )
ou un décimal : var reg = /^\d+[.]\d+$/
ou un nombre (entier ou décimal) : var reg = /^\d+[.]?\d*$/ ( * signifie "0 ou plusieurs fois" et ? signifie "0 ou 1 fois" )
ou un décimal finissant par ".5" (demandé par un visiteur) var reg = /^\d*[.]5$/
... etc
L'objet RegExp, comme ceux utilisés dans les autres fiches, est décrit dans la doc JVScript ! Suivent quelques-uns des caractères pouvant constituer ce masque...
Caractère
Exemples
Commentaire
^ $
Début et fin de la saisie
[ ]
[asp] [0-9] [a-zA-Z]
Liste de caractères
[^ ]
[^asp] [^0-9] [^a-zA-Z]
Liste de caractères exclus
(modele)
Modèle
x|y
(f|z)oo : marche pour foot ou zoo
x ou y
*
Le caractère précédent apparaît 0 ou plusieurs fois
+
Le caractère précédent apparaît 1 ou plusieurs fois
?
Le caractère précédent apparaît 0 ou 1 fois
{n}
Le caractère précédent apparaît exactement n fois
{n,}
Le caractère précédent apparaît au moins n fois
{n,m}
Le caractère précédent apparaît de n à m fois
\
\\ --> \ \( --> ( \) --> )
\n --> nouvelle ligne
\f --> saut de page
\t --> tabulation
On peut déclarer autrement une variable RegExp : var reg = new RegExp("blablabla")
Un paramètre supplémentaire (commutateur) peut être ajouté :
var reg = /blablabla/commut ou var reg = new RegExp("blablabla","commut") avec 3 valeurs possibles pour commut :
i : ignorer la casse (diff maj/min) ;
g : recherche globale (toutes les occurences) ;
gi : recherche globale ignorant la casse ;
la 1ère occurence trouvée dans la chaîne est à RegExp.index ou -1 si pas trouvé...
On peut aussi remplacer les occurences par une autre sous-chaîne : chaine.replace(reg, souschaine)
On peut aussi décomposer une chaîne en un tableau : chaine.split(reg)
On peut enfin obtenir un tableau des résultats de recherche avec exec ou match... l'élément 0 contient les derniers caractères retenus et les autres éléments (1 à 9) les correspondances des modèles entre parenthèses dans l'expression régulière.