Expression régulière correspondant unique dot, mais pas deux points?
D'essayer de créer une regex modèle pour l'adresse email. Qui permettra à un point (.) mais pas si il y a plus d'un côté les unes des autres.
Doit correspondre à:
[email protected]
Ne doit pas correspondre à:
[email protected]
Maintenant, je sais qu'il y a des milliers d'exemples sur internet pour l'e-mail de correspondance, donc merci de ne pas poster moi des liens avec des solutions complètes, je suis en train de l'apprendre ici.
La partie qui m'intéresse le plus, c'est juste la partie locale:
test.test qui doit correspondre et test..test qui ne devrait pas égaler.
Merci de votre aide.
La spécification définit la manière dont vous devez faire correspondre tools.ietf.org/html/rfc2822#page-17 . Il sera beaucoup plus facile de construire robuste regex de cette façon que d'utiliser les solutions ad hoc ici que seulement regarder le problème de 2 points
En fait j'ai été en passant par des spécifications,... Et est venu à mon premier obstacle à essayer d'apprendre expression régulière correspondant à un point, mais pas deux ou plus les uns à côté des autres.
Eh bien, il dit partie locale est soit dot-atome ou une chaîne de caractères entre guillemets, puis vous regardez ce point-atome qui est de 1 atomtext suivi éventuellement par un point et un autre atome de texte. Qui est automatiquement une regex qui disqualifie les chaînes de caractères commençant avec dot, se terminant avec la dot, ou d'en avoir deux ou plus de deux points successifs dans le milieu. Pour des raisons de simplicité, supposons atomtext est juste les caractères a-z). Puis la partie locale qui ne permet point atomes est:
En fait j'ai été en passant par des spécifications,... Et est venu à mon premier obstacle à essayer d'apprendre expression régulière correspondant à un point, mais pas deux ou plus les uns à côté des autres.
Eh bien, il dit partie locale est soit dot-atome ou une chaîne de caractères entre guillemets, puis vous regardez ce point-atome qui est de 1 atomtext suivi éventuellement par un point et un autre atome de texte. Qui est automatiquement une regex qui disqualifie les chaînes de caractères commençant avec dot, se terminant avec la dot, ou d'en avoir deux ou plus de deux points successifs dans le milieu. Pour des raisons de simplicité, supposons atomtext est juste les caractères a-z). Puis la partie locale qui ne permet point atomes est:
/^([a-z](?:\.[a-z])*)+$/
OriginalL'auteur Carbon6 | 2012-05-20
Vous devez vous connecter pour publier un commentaire.
Vous pouvez permettre à un nombre quelconque de
[^\.]
(n'importe quel caractère sauf un point) et[^\.])\.[^\.]
(un point fermée par deux non-points) en utilisant une disjonction (le symbole de canal|
) entre eux et mettre le tout avec*
(nombre de personnes) entre^
et$
de sorte que l'ensemble de la chaîne est constituée de ceux-ci. Voici le code:Rendements:
\.{1}
il convient de noter que ceci ne permet pas de points à la fin et au début de la chaîne
et ne devrait-elle pas être réellement
'/^([^\.]|([^\.]\.[^\.]))*$/'
au lieu de'/^([^\.]|([^\.])\.[^\.])*$/'
? (les parenthèses autour de la[^\.]\.[^\.])
, pas seulement[^\.]
)Il n'a pas d'importance, en fait, à l'intérieur des parenthèses pourrait juste être laissé de côté. Les parenthèses ont priorité plus basse que celle de la disjonction, de sorte qu'il est encore analysée correctement.
OriginalL'auteur Junuxx
Présente des coutures plus logique pour moi:
Et c'est simple. Le " look-ahead & regardez-derrières sont en effet très utile, car ils ne captent les valeurs. Mais dans ce cas, le groupe de capture est seulement vers le milieu dot.
OriginalL'auteur Mihai Stancu
strpos
fonction est plus simple, si `$input' a pas '..' votre test est un succès.OriginalL'auteur MajidTaheri
Pour répondre à la question dans le titre, je mettrais à jour la RegExp par Junuxx et permettent de points au début et à la fin de la chaîne:
qui est facultatif
.
au début, suivie par un certain nombre de non-.
ou [non-.
suivie par.
].OriginalL'auteur YakovL
Qui devrait le faire pour ce qui vient avant la
@
, je vais laisser le reste pour vous.Notez que vous devez optimiser davantage pour éviter un autre personnage étrange configurations, mais cela semble suffisant dans la réponse à ce qui vous intéresse
N'oubliez pas le
^
et$
comme j'ai fait 🙁Aussi oublié de slash le
.
- je suis bêteYep désolé, j'ai oublié le ^ et le $, doit maintenant retourner true pour le test.test@ et false pour les tester..test@
OriginalL'auteur Bilal Akil