Когда Апостроф не Апостроф - валидация .Net / Javascript - PullRequest
4 голосов
/ 21 сентября 2009

У меня есть средство проверки регулярных выражений для электронных писем в .NET 2.0, которое использует проверку на стороне клиента (javascript).

Текущее выражение: "\ w + ([- +. '] \ w +) @ \ w + ([-.] \ W +) . \ W + ([-.] \ W + )", который работает для моих нужд (или так я думал).

Однако у меня возникла проблема с апострофами, когда я скопировал / вставил адрес электронной почты из Outlook в текстовое поле форм

Chris.O'Brian@somerandomdomain.com

Вы можете видеть, что апостроф - это другой персонаж, чем тот, который можно получить, если бы я просто набрал текстовое поле

'против' - но оба апострофы

Хорошо, подумал я, давайте просто добавим этот символ в строку проверки, чтобы я получил

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

Я копирую, вставляю «специальный» апостроф в выражение проверки, затем набираю электронное письмо и использую тот же элемент буфера обмена, чтобы вставить апостроф, но проверка все равно не проходит.

Апостроф не выглядит одинаково в коде .net файла, как форма .net, и поскольку проверка по-прежнему не выполняется, я предполагаю, что он считается другим символом из-за некоторого кодирования .cs исходный файл?

Это звучит правдоподобно, кто-то еще сталкивался с такой же проблемой?

Спасибо

Ответы [ 4 ]

1 голос
/ 21 сентября 2009

Если вы только что вставили ’ (U+2019 RIGHT SINGLE QUOTATION MARK) в ваш документ, и он не работал, это означает, что ваш документ не использует Unicode.

Когда вы кодируете и отправляете файл как UTF-8 (например), он прекрасно работает без дальнейших изменений. В противном случае вы должны выйти из него через \u2019, который также работает в регулярных выражениях JavaScript:

"\w+([-+.'\u2019]\w+)@\w+([-.]\w+).\w+([-.]\w+)"
1 голос
/ 21 сентября 2009

В чем-то вроде Outlook будет тенденция использовать «умные цитаты»

Вот некоторая справочная информация

1 голос
/ 21 сентября 2009

Вы должны добавить '+' после ([- +. '`] \ W +), чтобы учесть несколько групп слов. Выражение, которое вы дали, допускает только два слова, а у вас есть три: Крис, О, Брайан.

Надеюсь, это прояснит ситуацию.

0 голосов
/ 21 сентября 2009

В XML вы можете проверить значение символа апострофа, сравнивая его с его ссылкой на сущность символа:

'

Однако эта сущность не существует в SGML-форме HTML. И в качестве дополнительного бонуса JavaScript не может сравнивать одинарную кавычку с двойной кавычкой. При сравнении они оценивали как истинные. Единственное решение - преобразовать одинарные кавычки и двойные кавычки в ссылку на символьную сущность вашего изобретения, выполнить сравнение, а затем заменить эти выдуманные ссылки на сущность соответствующими символами кавычки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...