2009-09-21 8 views
4

J'ai un validateur d'expressions régulières pour les emails dans .NET 2.0 qui utilise la validation côté client (javascript).Quand une Apostrophe n'est pas une Apostrophe - validation .Net/Javascript

L'expression actuelle est "\ w + ([- + '.] \ w +) @ \ w + ([-.] \ W +) \ w + ([-.] \ W +)." qui fonctionne pour mes besoins (ou alors je pensais).

Cependant, je devenais un problème avec apostrophes comme je l'avais copier/coller une adresse e-mail à partir d'Outlook dans le champ texte des formulaires

Chris.O'[email protected]

Vous pouvez voir lapostrophe est un personnage différent de ce que obtiendriez si je devais juste taper dans une zone de texte

« vs » - mais les deux sont apostrophes

d'accord, je pensais, permet d'ajouter juste ce caractère dans la chaîne de validation si je reçois

"\ w + ([-. + ''] \ w +) @ \ w + ([-.] \ W +) \ w + ([-.] \ W +)."

I copier coller l'apostrophe "spéciale" dans l'expression de validation, puis je tape l'email et j'utilise le même élément du presse-papiers pour coller l'apostrophe mais la validation échoue toujours. L'apostrophe ne semble pas identique dans le code .net derrière le fichier que le formulaire. NET et parce que la validation échoue toujours, je suppose qu'il est considéré comme un caractère différent en raison d'une sorte de codage de la. cs fichier source?

Est-ce que cela semble plausible, quelqu'un d'autre a-t-il rencontré le même problème?

Merci

Répondre

1

Vous devez ajouter un '+' après ([-. + ' `] \ W +), pour permettre plusieurs groupes de 'mots'. L'expression que vous avez donnée ne permet que deux mots, et vous en avez trois: Chris, O, Brian.

Espérons que cela rend les choses plus claires.

1

Il y aura une tendance à quelque chose comme Outlook à utiliser "Smart Quotes de

Here's certaines informations de fond

0

En XML, vous pouvez tester la valeur d'un caractère apostrophe en évaluant contre sa référence d'entité de caractère :

' 

Cette entité n'existe cependant pas dans la forme SGML de HTML. Et comme bonus supplémentaire, JavaScript ne peut pas comparer un seul devis à un double devis. Lorsque comparés, ils ont évalué à vrai. La seule solution consiste à convertir des guillemets simples et des guillemets en une référence d'entité de caractère de votre invention, à effectuer la comparaison, puis à remplacer les références d'entité inventées par les guillemets appropriés.

1

Si vous venez de coller le ’ (U+2019 RIGHT SINGLE QUOTATION MARK) dans votre document et que cela n'a pas fonctionné, cela signifie que votre document n'utilise pas unicode.

Lorsque vous codez et envoyez le fichier sous la forme UTF-8 (par exemple), cela fonctionne correctement sans autres modifications. Sinon, vous devez lui échapper via \u2019 qui fonctionne également dans les expressions régulières de JavaScript:

"\w+([-+.'\u2019]\w+)@\w+([-.]\w+).\w+([-.]\w+)" 
Questions connexes