Разрешенные символы (по крайней мере) A-Z, a-z, 0-9, ö, Ö, ä, ä, å, Å и немецкие, латышские, эстонские (если есть) специальные символы? Есть ли готовый метод или мне нужно сделать черный список (недопустимые символы) и регулярные выражения IsMatch? Если нет готового использования черного списка?
Как узнать, содержит ли строка неабелевых числовых символов в С#/.NET 2.0?
Ответ 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
Было бы проще совместить допустимые символы, чтобы получить ложное возвращение.