Вы можете аппроксимировать производное свойство Unicode \p{Alphabetic}
довольно кратко с [\pL\pM\p{Nl}]
, если ваш язык напрямую не поддерживает правильное Alphabetic свойство.
Не используйте Java \p{Alpha}
, потому что это только ASCII .
Но тогда вы заметите, что вам не удалось учесть тире (\p{Pd}
или DashPunctuation работает, но это не включает большинство дефисов!), апострофы (обычно, но не всегда: U + 27, U + 2BC, U + 2019 или U + FF07), запятая или полная остановка / период.
Возможно, вам лучше включить \p{Pc}
ConnectorPunctuation , на всякий случай.
Если у вас есть свойство, производное от Unicode \p{Diacritic}
, вам также следует использовать это, потому что оно включает в себя такие вещи, как средняя точка, необходимая для обозначенных буквами L на каталанском языке, и несмещаемые формы диакритических знаков, которые иногда используют люди.
Но тогда вы найдете людей, которые используют порядковые номера в своих именах способами, которые \p{Nl}
( LetterNumber ) не соответствуют, поэтому вы бросаете \p{Nd}
( DecimalNumber * 1032) *) или даже все \pN
( Number ) в миксе.
Затем вы понимаете, что азиатские имена часто требуют правильного написания ZWJ или ZWNJ в своих сценариях, поэтому вам нужно добавить U + 200D и U + 200C к миксу, которые оба \p{Cf}
( Формат ) символов, а также JoinControl единиц.
К тому времени, как вы закончите ищите различные свойства Unicode для различных и многих экзотических символов, которые продолжают появляться - или когда вы думаете, все готово, скорее - вы почти наверняка придете к выводу, что вы справились бы с этим гораздо лучше, если бы просто позволили им использовать любые символы Unicode для своего имени, как они пожелают, как ссылка, которую Тим цитирует . Да, вы получите несколько джокеров, вставляющих такие вещи, как «ʇƨɐ⅂uʇƨɐ⅂ əɯɐuʇƨɹᴉℲ», но это относится только к территории, и вы не можете исключать глупые имена любым разумным способом.