Chaîne ou e-mail vide Regex


128

J'ai trouvé beaucoup de validation de courrier électronique Regex dans SO mais je n'en ai trouvé aucune qui accepterait une chaîne vide. Est-ce possible uniquement via Regex? Accepter une chaîne vide ou un e-mail uniquement? Je veux avoir ceci sur Regex uniquement.

Réponses:


313

Ce modèle regex correspondra à une chaîne vide:

^$

Et cela correspondra (grossièrement) à un email ou à une chaîne vide:

(^$|^.*@.*\..*$)

1
Quelque chose à considérer, faire ^ (|. * ​​@. * \ .. *) $ devrait avoir le même effet que celui indiqué soit vide ou ceci en n'utilisant qu'une seule fois ^ et $, pour le ranger un peu.
Runevault

1
C'est assez vieux, mais je suis juste tombé dessus et j'ai eu des problèmes avec la réponse. Il y a des cas où le début d'une chaîne est masqué mais correspond toujours à ^, où vous recherchez effectivement un e-mail ou rien au milieu d'une chaîne. Pour cela, (email_regex)?c'est mieux adapté.
jclancy

Assurez-vous de lire à quel point la validation des e-mails est extrêmement compliquée avant d'essayer d'utiliser RegEx pour le faire. stackoverflow.com/questions/201323/…
bryan kennedy

Cela correspondra à l'e-mail test.test@test suivant. Celui-ci est meilleur je pense ^ $ | ^ [^ \ s @] + @ [^ \ s @] + \. [^ \ S @] + $ car il acceptera des courriels comme test@test.se
dont_trust_me

Dans une application Java particulière, le ^$ne fonctionne pas, mais ^(?!.)fonctionne: [ ^début de chaîne, (?!)anticipation négative, .tout caractère - sans compter le saut de ligne]
LightCC

8

correspondant à une chaîne ou à un e-mail vide

(^$|^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.(?:[a-zA-Z]{2}|com|org|net|edu|gov|mil|biz|info|mobi|name|aero|asia|jobs|museum)$)

correspondant à une chaîne vide ou à un e-mail, mais également à n'importe quelle quantité d'espaces blancs

(^\s*$|^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.(?:[a-zA-Z]{2}|com|org|net|edu|gov|mil|biz|info|mobi|name|aero|asia|jobs|museum)$)

en savoir plus sur le regex correspondant aux e-mails:

http://www.regular-expressions.info/email.html


2

Les réponses ci-dessus fonctionnent ($ pour vide), mais j'ai juste essayé ceci et cela fonctionne aussi pour laisser vide comme ceci:

/\A(INTENSE_EMAIL_REGEX|)\z/i

Même chose dans l'ordre inverse

/\A(|INTENSE_EMAIL_REGEX)\z/i

0

Ne faites pas correspondre un e-mail avec une expression régulière. C'est extrêmement moche, long et compliqué et votre parseur regex ne peut probablement pas le gérer de toute façon. Essayez de trouver une routine de bibliothèque pour les faire correspondre. Si vous ne souhaitez que pour résoudre le pratique problème de la correspondance d'une adresse e-mail (c'est-à-dire si vous voulez un code erroné qui fonctionne (généralement)), utilisez le lien regular-expressions.info soumis par quelqu'un d'autre.

Quant à la chaîne vide, elle ^$est mentionnée par plusieurs personnes et fonctionnera très bien.


13
Les expressions régulières laides peuvent en fait être gérées par des analyseurs de regex. Ne pas utiliser une expression régulière simplement parce que c'est moche est ridicule.
Peter

Ce n'est pas constructif. RegEx est essayé et testé (et loin d'être moche - diriez-vous que c'est assez élégant comment cela fonctionne?). Suggérer vaguement une bibliothèque sans aucune indication sur une solution possible va à l'encontre de l'objectif de réponse. Tout le monde doit ajouter un
...

Les expressions régulières sont notoirement difficiles à lire, à maintenir et à déboguer, ce qui en fait un candidat idéal pour un remplacement par un appel à une bibliothèque.
einnocent

2
Pour mémoire: je voudrais recommanderais volontiers une bibliothèque spécifique si je savais quelle langue OP utilisait. Puisqu'il s'agit d'une question indépendante de la langue, mes options sont plutôt limitées.
Kevin

2
Regex n'est pas censée être jolie. Selon cette logique, personne ne devrait jamais utiliser regex. Si vous êtes si catégorique sur le fait qu'une bibliothèque la remplace, que pensez-vous que cette bibliothèque va faire? Soit il aura du code très long et compliqué, soit il utilisera des regex ... À ce stade, vous pourriez aussi bien implémenter votre propre «bibliothèque». Et de nos jours, si quelqu'un ne sait pas comment utiliser les regex, il ne devrait probablement pas être chargé de valider les adresses e-mail de toute façon ...
Andrew

0

cela résoudra, il acceptera une chaîne vide ou précisera un identifiant de courrier électronique

"^$|^([\w\.\-]+)@([\w\-]+)((\.(\w){2,3})+)$"

2
pourriez-vous être un peu plus descriptif.
Vinay Prajapati

0

Je préfère /^\s+$|^$/gifaire correspondre les espaces vides et vides.

console.log("  ".match(/^\s+$|^$/gi));
console.log("".match(/^\s+$|^$/gi));


3
Si vous utilisez ^ \ s * $, vous n'avez pas besoin de la casse ou. De plus, il n'y a pas besoin de modificateurs g ou i car cela correspond à toute la ligne et n'implique aucun caractère avec casse.
Cadoo

0

Si vous l'utilisez dans des rails - activerecord validation, vous pouvez définir allow_blank: true

Comme:

validates :email, allow_blank: true, format: { with: EMAIL_REGEX }
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.