Всякий раз, когда кто-то пишет [A-Z]
или [a-z]
, он берет на себя обязательство обрабатывать только 7-битные данные ASCII.Если это действительно хорошо, тогда хорошо.Но если это не так, существуют свойства Юникода, чтобы помочь с этим.
В Юникоде есть три случая, а не два.Кроме того, у вас также есть письма без регистра.Буквы в общем случае определяются свойством \pL
, и каждая из них также принадлежит ровно к одной из пяти подкатегорий:
- заглавные буквы , указанные с помощью
\p{Lu}
;например: AÇDZÞΣSSὩΙST
- заглавные буквы , заданные
\p{Lt}
;Например: LjDzSsᾨSt
(на самом деле Ss
и St
являются заглавными, а затем строчными буквами, но они равны , что вы получите, если попросите заглавные буквы ß
и ſt
соответственно) - строчные буквы , указано
\p{Ll}
;например: aαçdzςσþßᾡſt
- буквы-модификаторы , указанные с
\p{Lm}
;Например: ʰʲᴴᴭʺˈˠᵠꜞ
- другие буквы , указано
\p{Lo}
;Например: ƻאᎯᚦ京
Вы можете принять дополнение к любому из них, но будьте осторожны, потому что что-то вроде \P{Lu}
действительно не означаетбуква не заглавнаяЭто означает любой символ, который не является заглавной буквой.
Для буквы, которая состоит из заглавных или заглавных букв, используйте [\p{Lu}\p{Lt}]
.Таким образом, вы можете использовать для своего шаблона:
^([\p{Lu}\p{Lt}]\p{Ll}+)+$
Если вы не хотите ограничивать буквы, следующие за первыми, только прописными буквами, то вы можете предпочесть:
^([\p{Lu}\p{Lt}][\p{Ll}\p{Lm}\p{Lo}]+)+$
Если вы пытаетесь сопоставить так называемые идентификаторы «CamelCase», то фактические правила зависят от языка программирования, но обычно включают символ подчеркивания и десятичные числа (\p{Nd}
) и могут включать буквенный знак доллара.Если это так, вы можете добавить некоторые из них к одному или другому из двух классов символов выше.Например, вы можете добавить подчеркивание к обоим, но цифры только ко второму, оставляя вас с:
^([_\p{Lu}\p{Lt}][_\p{Nd}\p{Ll}\p{Lm}\p{Lo}]+)+$
Если, однако, вы имеете дело с определенными словами из различных RFC и стандартов ISO, эточасто указывается как содержащий только ASCII.Если это так, вы можете обойтись с буквальной идеей [A-Z]
.Это просто нехорошо навязывать это ограничение, если оно на самом деле не существует.