Как узнать, содержит ли строка не буквенно-цифровые символы в C # /. NET 2.0? - PullRequest
16 голосов
/ 17 июня 2010

Допустимые символы (по крайней мере): AZ, az, 0-9, ö, Ö, ä, ä, å, Å и немецкий, латвийский, эстонский (если есть) специальные символы?Есть готовый метод или мне нужно сделать черный список (недопустимые символы) и регулярные выражения IsMatch?Если нет готового, как использовать черный список?

Ответы [ 4 ]

31 голосов
/ 17 июня 2010

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

string test = "Aasdf345ÅÄÖåäöéÉóÓüÜïÏôÔ";
if (test.All(Char.IsLetterOrDigit)) { ... }

Char.IsLetterOrDigit возвращает истину для символов, которые в Юникоде классифицированы как UppercaseLetter, LowercaseLetter, TitlecaseLetter, ModifierLetter, OtherLetter или DecimalDigitNumber.

6 голосов
/ 17 июня 2010

Расследовать char.IsLetterOrDigit(char).

Например:

myString.All(c => char.IsLetterOrDigit(c));
4 голосов
/ 17 июня 2010

Черный список символов, вероятно, довольно большой: -)

Вы можете использовать регулярное выражение

^[\d\p{L}]+$

для сопоставления десятичных цифр и букв независимо от сценария.

Это регулярное выражение состоит из класса символов, содержащего сокращения \d - который содержит каждую цифру (всего 230 в BMP) и \p{L}, который содержит каждый символ Unicode, классифицированный как «буква» (46817 в BMP),Затем указанный класс символов повторяется как минимум один раз и встраивается между ^ и $ - якорями начала и конца строки, поэтому он соответствует полной строке.

Для некоторых механизмов регулярных выражений, поскольку вы толькоинтересуясь латинскими буквами, по-видимому, вы также можете использовать

^[\d\p{Letter}]+$

Однако .NET не поддерживает это.Первое упомянутое регулярное выражение на самом деле ловит все, что является цифрой или буквой в любом скрипте.Таким образом, он покорно будет совпадать с индийскими или арабскими цифрами и ивритом, кириллицей и другими нелатинскими буквами.В зависимости от того, что вы хотите, это может не подходить.

Если это создает проблему, то я не вижу лучшего варианта, чем явное перечисление символов, которые вы хотите разрешить.Однако я считаю опасным предполагать, что текст на определенном языке всегда ограничен сценарием этого языка.Если бы я написал чешское или польское имя в тексте на немецком языке, то мне, вероятно, понадобилось бы больше, чем просто [a-zA-ZäöüÄÖÜß].

0 голосов
/ 17 июня 2010

Было бы проще сопоставить разрешенным символам перехват ложного возврата.

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