2010-06-01 1 views
9

Каких регулярного выражения можно использовать, чтобы соответствовать (разрешить) любые письма с любого языком.net Regular Expression, чтобы соответствовать любому виду письма с любым языком

мне нужно, чтобы соответствовать любой букве, включая любые диакритик (например, , ü, ñ и т. д.) и исключить любой символ (математические символы, знаки валюты, дингбаты, символы рисования в рамке и т. д.) и знаки пунктуации.

Я использую asp.net MVC 2 с .net 4. Я пробовал эту аннотацию на мой взгляд, модель:

[RegularExpression(@"\p{L}*", ... 

и это одна:

[RegularExpression(@"\p{L}\p{M}*", ... 

, но на стороне клиента проверка не работает.

UPDATE: Спасибо за все ваши ответы, ваши предложения работать, но только для .net и проблема здесь заключается в том, что он также использует регулярное выражение для проверки на стороне клиента с JavaScript (извиняюсь, если это не было достаточно ясно) , я должен был пойти с:

[^ 0-9_ \ | ° ¬ # \ $%/\() \ ¡¿+ {} []:?. \; @ ª^* <> = &] *

, который очень уродлив и не охватывает все сценарии, но является самым близким к тому, что мне нужно.

+0

Что значит «Это не работает»? Это не очень краткое описание проблемы. –

+0

ну, не работает, значит, он не подтверждает, что мне нужно для проверки, или то, что он должен проверять (см. Ссылку Lukas), но, если быть более конкретным, то, что я положил, не подтверждает – pedro

+0

. Это сработает для вас? или у вас есть альтернативное регулярное выражение для этого? – pedro

ответ

1

Одной вещью, на которую следует обратить внимание, является регулярное выражение на стороне клиента. Он использует javascript regex на стороне клиента и регулярное выражение .net на стороне сервера. Javascript не поддерживает этот сценарий.

0

\ ш - соответствует любой алфавитно-цифровой символ (включая номера)

В моих тестах она была сопоставлена:

  • ã
  • à
  • ç
  • г

и не соответствует:

  • ;
  • ,
  • \
  • :

В случае, если вы точно знаете, что вы хотите исключить (как маленький список), вы канд сделать следующее:

[^;, \ ` .]

, который соответствует один раз любой символ, который разве:

  • ;
  • ,
  • \
  • `
  • .

Надеюсь, это поможет!

+1

'\ w' также будет соответствовать' _' – Senseful

+0

@eagle hmm .. вы правы, по крайней мере, я дал альтернативу. Собираюсь проверить это, хотя – Marcelo

+0

\ w - означает Word. Не письмо. –

1

\p{L}* должен соответствовать «любому письму с любого языка». Он должен работать, я использовал его в i18n-proof uppercase/lowercase recognition regex в .NET.

+0

Тогда проблема может быть более конкретной, чем я думал, я обновлю вопрос – pedro

5

Игнорируйте своего учителя грамматики и использовать двойные негативы:

[^\W\d_] 

Помните, что \w матчи любая буква, цифра или знак подчеркивания, поэтому исключить их, как указано выше. Вы могли бы прочитать его как «не не-слово-символ, а не цифру, а не символ подчеркивания», который оставляет только буквы. Применить теорему де Моргана, и это имеет смысл: «слово-символ, но ни цифры, ни подчеркиванием»

4

Вы можете использовать Char.IsLetter:

Указывает, является ли классифицировать указанный символ Unicode, как Unicode письмо.

С .Net 4.0:

string onlyLetters = String.Concat(str.Where(Char.IsLetter)); 

На 3,5 String.Concat excepts только массив, так что вы должны также вызвать ToArray.

+1

+1 Лучше с Char.IsLetter, чем regex :) – Christian

+0

Это не отвечает на вопрос, не обязательно вопрос заключается в том, чтобы решить проблему, возможно, это было сделано, чтобы узнать REGEX, я не знаю. Хорошо, это может быть проблема, но он специально задает, как это сделать с регулярным выражением (через вопрос, тег и даже заголовок), что явно достижимо. +1 для решения «проблемы», -1 для ответа на вопрос. Нейтральная. – Marcelo

+0

Это не работает «на стороне клиента» – GvS

2

Ваша проблема с большей вероятностью связана с тем, что вам нужно будет только один alpha-char, потому что регулярное выражение будет соответствовать любому, что имеет хотя бы один символ.

При добавлении ^ в качестве префикса и $ в качестве постфикса, все предложение должно соответствовать вашему регулярному выражению. Так что это вероятностный работает:

^\p{L}*$ 

RegexBuddy объясняет: положение

  1. ^ Assert в начале строки
  2. \p{L} Персонаж со свойством «буквой» Unicode (любого рода письма от любого вида языка) 2a. Между нулем и неограниченное количество раз, как можно больше (жадный)
  3. $ положение Assert в конце строки
+0

'\ p {L}' is winner = "Соответствует любому письму с любого языка" –

1

Я только что для проверки URL, и я выбрал это регулярное выражение в .NET.

^[(\p{L})?(\p{M})?-]*$ 

Начните и оканчивайтесь символом любого языка (необязательно, буквами или знаками) и допускайте дефисы.

Смежные вопросы