Черный список символов, вероятно, довольно большой: -)
Вы можете использовать регулярное выражение
^[\d\p{L}]+$
для сопоставления десятичных цифр и букв независимо от сценария.
Это регулярное выражение состоит из класса символов, содержащего сокращения \d
- который содержит каждую цифру (всего 230 в BMP) и \p{L}
, который содержит каждый символ Unicode, классифицированный как «буква» (46817 в BMP),Затем указанный класс символов повторяется как минимум один раз и встраивается между ^
и $
- якорями начала и конца строки, поэтому он соответствует полной строке.
Для некоторых механизмов регулярных выражений, поскольку вы толькоинтересуясь латинскими буквами, по-видимому, вы также можете использовать
^[\d\p{Letter}]+$
Однако .NET не поддерживает это.Первое упомянутое регулярное выражение на самом деле ловит все, что является цифрой или буквой в любом скрипте.Таким образом, он покорно будет совпадать с индийскими или арабскими цифрами и ивритом, кириллицей и другими нелатинскими буквами.В зависимости от того, что вы хотите, это может не подходить.
Если это создает проблему, то я не вижу лучшего варианта, чем явное перечисление символов, которые вы хотите разрешить.Однако я считаю опасным предполагать, что текст на определенном языке всегда ограничен сценарием этого языка.Если бы я написал чешское или польское имя в тексте на немецком языке, то мне, вероятно, понадобилось бы больше, чем просто [a-zA-ZäöüÄÖÜß]
.