web-dev-qa-db-fra.com

Expression régulière qui correspond à un modèle ou est une chaîne vide

J'ai l'expression régulière suivante qui correspond à un format d'adresse e-mail:

^[\w\.\-]+@([\w\-]+\.)+[a-zA-Z]+$

Ceci est utilisé pour la validation avec un formulaire utilisant JavaScript. Cependant, il s'agit d'un champ facultatif. Par conséquent, comment puis-je modifier cette expression régulière pour qu'elle corresponde à un format d'adresse e-mail ou à une chaîne vide?

D'après ma connaissance limitée des regex, je pense que \b correspond à une chaîne vide et | signifie "Ou", j'ai donc essayé de faire ce qui suit, mais cela n'a pas fonctionné:

^[\w\.\-]+@([\w\-]+\.)+[a-zA-Z]+$|\b
61
Curt

Pour faire correspondre pattern ou une chaîne vide, utilisez

^$|pattern

Explication

  • ^ Et $ Sont respectivement le début et la fin des ancres de chaîne.
  • | Est utilisé pour désigner des remplaçants, par exemple this|that.

Les références


Sur \b

\b Dans la plupart des saveurs est une ancre "limite de mot". C'est une correspondance de largeur nulle, c'est-à-dire une chaîne vide, mais elle ne correspond qu'à ces chaînes à des endroits très spécifiques , à savoir aux limites d'un mot.

Autrement dit, \b Est situé:

  • Entre \w Et \W Consécutifs (l'une ou l'autre commande):
    • c'est-à-dire entre un caractère Word et un caractère non Word
  • Entre ^ Et \w
    • c'est-à-dire au début de la chaîne si elle commence par \w
  • Entre \w Et $
    • c'est-à-dire à la fin de la chaîne si elle se termine par \w

Les références


Sur l'utilisation de l'expression régulière pour faire correspondre les adresses de messagerie

Ce n'est pas anodin selon les spécifications.

Questions connexes

156
polygenelubricants

Une alternative serait de placer votre expression rationnelle entre parenthèses non capturantes. Rendez ensuite cette expression facultative en utilisant le ? qualificatif, qui recherchera 0 (c'est-à-dire une chaîne vide) ou 1 instances du groupe non capturé.

Par exemple:

/(?: some regexp )?/

Dans votre cas, l'expression régulière ressemblerait à ceci:

/^(?:[\w\.\-]+@([\w\-]+\.)+[a-zA-Z]+)?$/

Non | "ou" opérateur nécessaire!

Ici est la documentation de Mozilla pour la syntaxe JavaScript Regular Expression.

9
Jgonzalez731

Je ne sais pas pourquoi vous souhaitez valider une adresse e-mail facultative, mais je vous suggère d'utiliser

^$|^[^@\s]+@[^@\s]+$

sens

^$        empty string
|         or
^         beginning of string
[^@\s]+   any character but @ or whitespace
@         
[^@\s]+
$         end of string

Vous n'empêcherez pas les faux e-mails de toute façon, et de cette façon, vous n'empêcherez pas les adresses valides.

3
Zano

\ b correspond à une limite de Word. Je pense que vous pouvez utiliser ^ $ pour une chaîne vide.

0
pritaeas