.net Regular Expression для соответствия любому виду буквы с любого языка

Который регулярное выражение может я использовать для соответствия (позволяют) любой вид буквы с любого языка

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

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

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

и этот:

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

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

ОБНОВЛЕНИЕ: Спасибо за все Ваши ответы, Ваша работа предложений, но только для .NET и проблемы здесь состоит в том, что это также использует regex для клиентской проверки с JavaScript (извините, если это не было достаточно ясно). Я должен был пойти с:

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

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

9
задан pedro 5 August 2013 в 07:05
поделиться

6 ответов

Следует остерегаться регулярного выражения на стороне клиента. Он использует регулярное выражение javascript на стороне клиента и регулярное выражение .NET на стороне сервера. Javascript не поддерживает этот сценарий.

1
ответ дан 4 December 2019 в 14:26
поделиться

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

[^\W\d_]

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

.
5
ответ дан 4 December 2019 в 14:26
поделиться

Можно использовать Char.IsLetter:

Указывает, относится ли указанный символ Unicode к категории букв Unicode.

В .Net 4.0:

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

В 3.5 String.Concat исключает только массив, поэтому следует также вызвать ToArray.

4
ответ дан 4 December 2019 в 14:26
поделиться

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

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

  • ã
  • à
  • ç
  • 8
  • z

и hasn ' t соответствует:

  • ;
  • ,
  • \
  • :

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

[^;, \ `.]

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

  • ;
  • ,
  • \
  • `
  • .

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

0
ответ дан 4 December 2019 в 14:26
поделиться

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

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

^\p{L}*$

Regexbuddy объясняет:

  1. ^ Утверждение позиции в начале строки
  2. \ p {L} Символ со свойством Unicode 'letter' (любой тип буквы с любого языка) 2а. От нуля до неограниченного количества раз, как можно больше (жадно)
  3. $ Утвердить позицию в конце строки
2
ответ дан 4 December 2019 в 14:26
поделиться

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

1
ответ дан 4 December 2019 в 14:26
поделиться
Другие вопросы по тегам:

Похожие вопросы: