Который регулярное выражение может я использовать для соответствия (позволяют) любой вид буквы с любого языка
Я должен соответствовать любой букве включая любые диакритические знаки (например, á, ü, ñ, и т.д.) и исключить любой вид символа (математические символы, знаки валюты, графические метки, тянущие поле символы, и т.д.) и знаки пунктуации.
Я использую asp.net MVC 2 с .net 4. Я попробовал эту аннотацию, по моему мнению, модель:
[RegularExpression(@"\p{L}*", ...
и этот:
[RegularExpression(@"\p{L}\p{M}*", ...
но клиентская проверка не работает.
ОБНОВЛЕНИЕ: Спасибо за все Ваши ответы, Ваша работа предложений, но только для .NET и проблемы здесь состоит в том, что это также использует regex для клиентской проверки с JavaScript (извините, если это не было достаточно ясно). Я должен был пойти с:
[^0-9_ \| ° ¬! #\\% $ / \() \?¡¿ + {} []:. \; ª^* <> =&]*
который очень ужасен и не покрывает все сценарии, но является самой близкой вещью к тому, в чем я нуждаюсь.
Следует остерегаться регулярного выражения на стороне клиента. Он использует регулярное выражение javascript на стороне клиента и регулярное выражение .NET на стороне сервера. Javascript не поддерживает этот сценарий.
Игнорируйте своего учителя грамматики и используйте двойные отрицания:
[^\W\d_]
Помните, что \w
соответствует любой букве, цифре или подчеркиванию, поэтому исключите их, как указано выше. Вы можете прочитать это как "не-слово-символ, не-цифра и не-подчеркивание" - что оставляет только буквы. Если применить теорему ДеМоргана, то получится более логичный вариант: "слово-символ, но не цифра и не знак подчеркивания"
Можно использовать Char.IsLetter
:
Указывает, относится ли указанный символ Unicode к категории букв Unicode.
В .Net 4.0:
string onlyLetters = String.Concat(str.Where(Char.IsLetter));
В 3.5 String.Concat
исключает только массив, поэтому следует также вызвать ToArray
.
\ w - соответствует любому буквенно-цифровому символу (включая числа)
В моих тестах он соответствовал:
и hasn ' t соответствует:
Если вы точно знаете, что хотите исключить (например, небольшой список), вы можете сделать следующее:
[^;, \ `.]
, который соответствует один раз любому символу, который не является:
Надеюсь, это поможет!
Ваша проблема более вероятна в том, что вам нужно будет иметь только один альфа-символ, потому что регулярное выражение будет соответствовать всему, что имеет хотя бы один символ.
Добавив ^
в качестве префикса и $
в качестве постфикса, все предложение должно соответствовать вашему регулярному выражению. Итак, эта проблема работает:
^\p{L}*$
Regexbuddy объясняет:
^
Утверждение позиции в начале строки \ p {L}
Символ со свойством Unicode 'letter' (любой тип буквы с любого языка)
2а. От нуля до неограниченного количества раз, как можно больше (жадно) $
Утвердить позицию в конце строки \ p {L} *
должно соответствовать «любой букве с любого языка». Он должен работать, я использовал его в i18n-proof регулярном выражении распознавания верхнего / нижнего регистра в .NET.