2013-02-28 3 views
3

Я пытаюсь сопоставить строку, чтобы увидеть, состоит ли она только из букв. Всевозможные буквы должны быть разрешены. Таким образом, типичный a-zA-Z, но и áàéèó... т.д.Разрешать только буквы и специальные буквы (éèà и т. Д.) Через регулярное выражение

Я пытался соответствовать его следующему регулярному выражению: ([\S])*

Но это также позволяет персонажи, как \/<>*()... и т.д. Это, очевидно, символы, которые не принадлежат в имени , Как выглядит регулярное выражение, когда я хочу только буквы и специальные буквы?

+0

возможно дубликат [Regex белого списка для проверки ввода - акцент нечувствительного] (http://stackoverflow.com/questions/5665570/ regex-white-list-for-input-validation-accent-insensitive) – CodeCaster

+0

Потому что, если он работает в C# _and_ Javascript, он не работает только для C#? Но ОК, затем этот: [Акцент без акцента?] (Http://stackoverflow.com/questions/6664582/regex-accent-insensitive), который также говорит «Использовать \ w +». – CodeCaster

+0

'Всевозможные буквы должны быть разрешены': означает ли это, что вам также нужны китайские, корейские, тайские и т. Д. Символы? – nhahtdh

ответ

4

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

\p{L} 

Таким образом, регулярное выражение

^\p{L}+$ 

будет соответствовать, если строка состоит только из букв. Если вы ожидаете объединения символов, то

^(\p{L}\p{M}*)+$ 

работает. Тест

Быстрый PowerShell:

PS> 'foo','bär','a.b','&^#&%','123','кошка' -match '^\p{L}+$' 
foo 
bär 
кошка 
+1

Обратите внимание, что это разрешает письмо на любом языке (китайский, корейский и т. Д.), А не только латинские скрипты. – nhahtdh

+1

+1 В качестве дополнительной информации на странице [regular-expressions.info о свойствах символов Юникода] (http://www.regular-expressions.info/unicode.html#prop) – stema

+1

nhahtdh: Ну, да, это то, что я понимаю, когда они говорят: «Всевозможные письма должны быть разрешены». – Joey

3

Для решения без Regex вы можете использовать char.IsLetter

Char.IsLetter Method

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

string str = "Abcáàéèó"; 
bool result = str.All(char.IsLetter); 

Это даст false результата для цифр и т.д. \/<>*()

+0

Поскольку они пытаются проверить материал, используя средство, которое позволяет проверять регулярное выражение, я думаю, что решение без регулярных выражений не будет работать. Я до сих пор отдал вам +1 раньше из-за элегантности, хотя это все равно не удавалось комбинировать персонажей (как и мое первоначальное решение). – Joey

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