2009-09-12 5 views
1

Là où je suis en cours d'exécution dans un barrage routier tente de vérifier cetteComment vérifier une adresse Web et rejeter un e-mail avec regex?

(?<http>(http|ftp|https):\/\/)?(?<address>([\w-]+\.)+[\w-]+(/[\w- ./?%&=]*)?) 

tout en rejetant l'expression si elle contient le signe @.

J'ai essayé un certain nombre de variations à ce sujet sans succès. Qu'est-ce qui fonctionnerait si je peux le dire pour m'assurer qu'il n'y a pas @ caractères dedans mais je ne veux pas exiger un caractère en utilisant la syntaxe [^@]. Alors, comment puis-je dire à regex d'accepter \w et rejeter @ en même temps. Je ne peux pas faire [\w^@] au meilleur de ma connaissance.

Ma difficulté est que j'utilise regex remplacer. Ar vous suggérez alors que j'utilise un espace réservé et dix match contre cela après?

+0

Quelques exemples de texte valide et invalide seraient utiles –

+0

www.cnn.com est une adresse valide [email protected] n'est pas et ne devrait pas être modifié. – Middletone

+0

Même si vous ne souhaitez pas autoriser le nom d'utilisateur @ URL, http://www.example.com/[email protected] est toujours une adresse valide. La validation d'une adresse e-mail ou d'une URL est très difficile à faire correctement dans regex; permettre à un nom d'hôte nu de fonctionner comme une URL le rend encore moins possible. – bobince

Répondre

3

Vous n'avez pas besoin de tout ranger dans une même expression. Vous pouvez, par exemple, faire correspondre votre regex existante, puis vérifier avec une regex secondaire que la chaîne n'a pas de @ -sign.

+0

Yep, n'a pas besoin d'être une regex pour une tâche. Les regex multiples sont peut-être plus claires. Peut-être que ce lien peut donner plus de conseils: http://www.regular-expressions.info/email.html –

0

Je suis d'accord avec Ned. Utilisez deux expressions régulières. Vous pouvez les obtenir à partir de plusieurs sources, y compris http://regexlib.com/