Tout d'abord, examinons deux caractères spéciaux : '^' et '$'. Ils sont utilisés respectivement pour correspondre au début et à la fin de la chaîne :
"^The" : correspond aux caractères commençant par "The" String
"
;of despair$" : correspond à la chaîne se terminant par "of despair" ;
"^abc$" : correspond à la chaîne commençant par abc et se terminant par abc, en fait, seul abc y correspond ;
"notice" : correspond aux chaînes contenant notice ;
you Vous pouvez voir que si vous n'utilisez pas les deux caractères que nous avons mentionnés (le dernier exemple), cela signifie que le motif (expression régulière) peut apparaître n'importe où dans la chaîne en cours de vérification et que vous ne l'utilisez pas pour verrouiller les côtés.
Il existe également plusieurs caractères '*', '+' et '?', qui sont utilisés pour représenter le nombre ou l'ordre d'occurrence d'un caractère. Ils représentent respectivement : « zéro ou plus », « un ou plusieurs » et. " zéro ou un. " Voici quelques exemples :
"ab*" : correspond à une chaîne composée de a et de zéro ou plus de b ("a
", "ab", "abbb", etc.) ;
ci-dessus, mais avec au moins un b ("ab", "abbb", etc.) ;
"ab ?" : correspond à 0 ou un b ;
"a?b+$" : correspond à un ou 0 a suivi de Ajouter plusieurs chaîne se terminant par b.
Vous pouvez également limiter le nombre de caractères apparaissant entre accolades, comme
"ab{2}" : correspond à un a suivi de deux b (pas moins) ("
abb ");
" : au moins deux b("abb", "abbbb", etc.);
"ab{3,5}": 2-5 b("abbb", "abbbb ", ou "abbbbb").
Vous devez également notez que vous devez toujours spécifier (c'est-à-dire "{0,2}", et non "{,2}"). De même, vous devez noter que '*', ' +' et '?' suivant trois annotations de plage, respectivement "{0,}", "{1,}" et "{0,1}".
Mettez maintenant un certain nombre de caractères entre parenthèses, par exemple :
"a(bc)*" : correspond à a suivi de 0 ou d'un "bc" ;
"a(bc){1,5}" : un à 5 "bc. "
a également un caractère '│', qui équivaut à l'opération OU :
"hi│hello" : correspond à une chaîne contenant "hi" ou "hello" ;
"(b│cd)ef" : correspond à une chaîne contenant "bef" Ou la chaîne de "cdef" ;
"(a│b)*c" : correspond à une chaîne contenant - plusieurs (y compris 0) a ou b, suivis d'une chaîne c ;
un point ('.' ) peut représenter tous les caractères uniques :
"a.[0-9]": un a suivi d'un caractère suivi d'un nombre (les chaînes contenant une telle chaîne seront mises en correspondance et cette parenthèse sera omise à l'avenir)
"^.{ 3}$": se termine avec trois caractères. Le contenu entre crochets ne correspond qu'à un seul caractère.
"[ab]" : correspond à un seul a ou b (identique à "a│b"
: correspond à un seul caractère de '
);a' à 'd' (même effet que "a│b│c│d" et "[abcd]");
"^[a-zA-Z]" : correspond aux caractères commençant par une lettre String
"[0-9 ]%" : Correspond aux chaînes contenant x%
, "[a-zA-Z0-9]$" : Correspond aux chaînes se terminant par une virgule suivie d'un chiffre ou d'une lettre.
Vous pouvez également mettre les caractères que vous ne souhaitez pas entre crochets . Il vous suffit d'utiliser '^' comme début de parenthèse (c'est-à-dire que "%[^a-zA-Z]%" correspond à deux signes pour cent avec un à l'intérieur d'une chaîne non alphabétique)
. interpréter, mais lorsque "^.[$()│*+?{" est utilisé comme caractère ayant une signification particulière, vous devez ajouter '' devant ces caractères, et en php3 vous devez éviter d'utiliser au début de le modèle. Par exemple, l'expression régulière "($│?[0-9]+" devrait être appelée ereg("( \$│?[0-9 ]+", $str) (je ne le fais pas). savoir si c'est la même chose en php4)
N'oubliez pas que les caractères entre crochets sont une exception à cette règle - entre crochets, tous les caractères spéciaux, y compris (''), perdront leurs propriétés spéciales (c'est-à-dire "[* +?{}.]" correspond aux chaînes contenant ces caractères). De plus, comme nous l'indique le manuel regx : "Si la liste contient ']', il est préférable de l'utiliser comme premier caractère de la liste. Un caractère (peut suivez '^'). S'il contient '-', il est préférable de le mettre au début ou à la fin, ou au deuxième point final d'une plage (c'est-à-dire [ad-0-9] Le '-' dans le le milieu sera valide.
Par souci d'exhaustivité, je devrais couvrir les séquences de collation, les classes de caractères et les classes d'équivalence. Mais je ne veux pas entrer trop dans les détails de ces aspects, et ceux-ci n'auront pas besoin d'être abordés dans le document. Vous trouverez plus d'informations dans les pages de manuel regex.
Comment créer un modèle pour correspondre à la saisie d'un montant en devise
. Nous allons maintenant utiliser ce que nous avons appris pour faire quelque chose d'utile : créer un modèle de correspondance pour vérifier si. les informations d'entrée sont un nombre représentant de l'argent. Nous pensons qu'il existe quatre façons de représenter la somme d'argent : "10 000,00" et "10 000,00", ou sans partie décimale, "10 000" et "10 000". Commençons maintenant à créer ce modèle de correspondance :
^[1-9][ 0 -9]*$
Cela signifie que toutes les variables doivent commencer par un nombre autre que 0. Mais cela signifie également qu'un seul « 0 » ne peut pas réussir le test. Voici la solution :
^(0│[1-9] [0- 9]*)$
"Seuls le 0 et les nombres commençant par 0 correspondent", nous pouvons également autoriser un signe négatif avant le nombre :
^(0│-?[1-9][0-9]*)$
Ceci est : "0 ou un nombre commençant par 0 qui peut avoir un signe négatif devant lui." D'accord, d'accord, soyons moins stricts et autorisons le fait de commencer par 0. Laissons maintenant de côté le signe négatif, car nous représentons des pièces de monnaie. Il n'est pas nécessaire de l'utiliser. Nous spécifions maintenant le modèle pour correspondre à la partie décimale :
^[0-9]+(.[0-9]+)?$
Cela implique que la chaîne correspondante doit commencer par au moins un arabe. digit . Mais notez que "10." ne correspond pas dans le modèle ci-dessus, seuls "10" et "10.2" le peuvent (savez-vous pourquoi)
^[0-9]+(.[0-9]{ 2. })?$
Nous avons précisé ci-dessus qu'il doit y avoir deux décimales après la virgule. Si vous pensez que c'est trop sévère, vous pouvez le remplacer par :
^[0-9]+(.[0-9]{1. ,2}) $
Cela autorisera un ou deux caractères après la virgule décimale. Maintenant que nous ajoutons des virgules pour plus de lisibilité (tous les trois chiffres), nous pouvons le représenter comme ceci :
^[0-9]{1,3}( ,[ 0-9]{3})*(.[0-9]{1,2})?$
N'oubliez pas le signe plus '+' qui peut être remplacé par le signe de multiplication '*' si vous souhaitez autoriser la saisie de chaînes vides (Pourquoi ?). N'oubliez pas non plus que la barre oblique inverse '' peut provoquer des erreurs dans les chaînes PHP (une erreur très courante). Maintenant que nous pouvons confirmer la chaîne, nous allons maintenant toutes les supprimer. virgules str_replace(" ,", "", $money) Ensuite, traitez le type comme double et nous pouvons faire des calculs mathématiques à travers lui.
Construction d'une expression régulière pour vérifier le courrier électronique
Continuons à discuter de la façon de vérifier une adresse e-mail de manière complète. adresse e-mail Il y a trois parties dans : le nom d'utilisateur POP3 (tout ce qui se trouve à gauche de '@' ), '@' , le nom du serveur (c'est la partie restante). Le nom d'utilisateur peut contenir des lettres majuscules et minuscules, des chiffres arabes, des points ('. '), moins ('-') et le trait de soulignement ('_'). Les noms de serveurs suivent également cette règle, à l'exception du trait de soulignement.
Désormais, les noms d'utilisateur ne peuvent pas commencer ou se terminer par des points. Il en va de même pour les serveurs. Il ne doit pas y en avoir deux. Il doit y avoir au moins un caractère entre des points consécutifs. Voyons maintenant comment écrire un modèle de correspondance pour le nom d'utilisateur :
^[_a-zA-Z0-9-]+$
L'existence de points est. pas encore autorisé. Disons-le Ajouter :
^[_a-zA-Z0-9-]+(.[_a-zA-Z0-9-]+)*$
Ce qui précède signifie : "Commencez par au moins un caractère canonique. (sauf . accidental) , suivi de 0 ou plusieurs chaînes commençant par un point. "
Pour simplifier, nous pouvons utiliser eregi() au lieu de ereg(). eregi() n'est pas sensible à la casse, nous n'avons donc pas besoin de le spécifier. deux plages " az " et " AZ " - vous n'avez qu'à en spécifier une :
^[_a-z0-9-]+(.[_a-z0-9-]+)*$
Le nom du serveur après est le même , mais le trait de soulignement doit être supprimé :
^[a-z0-9-]+(.[a-z0-9-]+)*$
Terminé. Utilisez maintenant simplement "@" pour connecter les deux parties :
^[_a. -z0-9-]+ (.[_a-z0-9-]+)*@[a-z0-9-]+(.[a-z0-9-]+)*$
Ceci est le fichier complet Mode de correspondance d'authentification de courrier électronique, il suffit d'appeler
eregi('^[_a-z0-9-]+(.[_a-z0-9-]+)*@[a-z0-9-]+(.[ a-z0-9-] +)*$ ',$eamil)
pour savoir s'il s'agit d'un e-mail.
D'autres utilisations d'expressions régulières
pour extraire des chaînes
ereg() et eregi() ont une fonctionnalité qui permet aux utilisateurs d'extraire une partie d'une chaîne via des expressions régulières (vous pouvez lire le manuel pour une utilisation spécifique. Par exemple, nous souhaitons en extraire une partie). une chaîne du chemin/URL Extraire les noms de fichiers – le code suivant est ce dont vous avez besoin :
ereg("([^\/]*)$", $pathOrUrl, $regs);
echo $regs[1];
Les substitutions avancées
ereg_replace() et eregi_replace() sont également très utiles : Si nous voulons remplacer tous les signes négatifs séparés par des virgules :
ereg_replace("[ nrt]+" , "," , trim($str));