Принимать символы международных имен в RegEx

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

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

if (!preg_match("/^[a-zA-Z\s'-]+$/", $name)) { // Error }

Теперь я понимаю, что это не лучший вариант, поскольку у людей могут быть такие вещи, как как: Д-р Мартин Лютер Кинг-младший (с запятой и точкой). Я предполагаю, что изменение его на это сделало бы его немного более эффективным.

if (!preg_match("/^[a-zA-Z\s,.'-]+$/", $name)) { // Error }

Затем я увидел имя девушки, которую я знаю на моем Facebook, которая пишет свое имя как Siân, что заставило меня задуматься об именах, которые содержат умляуты, а также говорят японские / китайские / корейские / русские символы. Итак, я начал искать и нашел способы, написав там каждого из этих персонажей вот так.

if (!preg_match("/^[a-zA-Z\sàáâäãåèéêëìíîïòóôöõøùúûüÿýñçčšžÀÁÂÄÃÅÈÉÊËÌÍÎÏÒÓÔÖÕØÙÚÛÜŸÝÑßÇŒÆČŠŽ∂ð ,.'-]+$/u", $first_name)) { // Error }

Как вы понимаете, он очень длинный, и я почти уверен, что существует гораздо более простой RegEx, который может этого добиться. Как я уже сказал, я искал, но это лучшее, что я могу сделать.

Итак, что является хорошим способом проверки символов верхнего и нижнего регистра, запятых, точек, апострофов, дефисов, умляутов, латыни, японского / русского и т. Д.

9
задан no. 4 November 2011 в 18:10
поделиться