Подтвердить что ты не робот

Как узнать, содержит ли строка неабелевых числовых символов в С#/.NET 2.0?

Разрешенные символы (по крайней мере) A-Z, a-z, 0-9, ö, Ö, ä, ä, å, Å и немецкие, латышские, эстонские (если есть) специальные символы? Есть ли готовый метод или мне нужно сделать черный список (недопустимые символы) и регулярные выражения IsMatch? Если нет готового использования черного списка?

4b9b3361

Ответ 1

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

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

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

Ответ 2

Изучите char.IsLetterOrDigit(char).

Например:

myString.All(c => char.IsLetterOrDigit(c));

Ответ 3

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

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

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

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

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

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

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

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

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

Ответ 4

Было бы проще совместить допустимые символы, чтобы получить ложное возвращение.