Регулярное выражение для соответствия арабскому или английскому имени

Я хотел, чтобы регулярное выражение совпадало с арабскими ИЛИ английскими именами, которые допускали бы только символы (алфавиты) и пробелы. Я нашел JavaScript RegEx, который выполняет эту работу.

var regex = /^(?:[a-zA-Z\s\u0600-\u06FF\u0750-\u077F\u08A0-\u08FF\uFB50-\uFDCF\uFDF0-\uFDFF\uFE70-\uFEFF]|(?:\uD802[\uDE60-\uDE9F]|\uD83B[\uDE00-\uDEFF])){0,30}$/;

Я преобразовал его в PCRE-совместимый как

/^(?:[a-zA-Z\s\x{600}-\x{6FF}\x{750}-\x{77F}\x{8A0}-\x{8FF}\x{FB50}-\x{FDCF}\x{FDF0}-\x{FDFF}\x{FE70}-\x{FEFF}]|(?:\x{D802}[\x{DE60}-\x{DE9F}]|\x{D83B}[\x{DE00}-\x{DEFF}])){0,70}$/u

Однако, когда я пытаюсь

var_dump(preg_match('/^(?:[a-zA-Z\s\x{0600}-\x{06FF}\x{0750}-\x{077F}\x{08A0}-\x{08FF}\x{FB50}-\x{FDCF}\x{FDF0}-\x{FDFF}\x{FE70}-\x{FEFF}]|(?:\x{D802}[\x{DE60}-\x{DE9F}]|\x{D83B}[\x{DE00}-\x{DEFF}])){0,70}$/u', 'Foo Bar'));

ИЛИ ЖЕ

var_dump(preg_match('/^(?:[a-zA-Z\s\x{600}-\x{6FF}\x{750}-\x{77F}\x{8A0}-\x{8FF}\x{FB50}-\x{FDCF}\x{FDF0}-\x{FDFF}\x{FE70}-\x{FEFF}]|(?:\x{D802}[\x{DE60}-\x{DE9F}]|\x{D83B}[\x{DE00}-\x{DEFF}])){0,70}$/u', 'Foo Bar'));

это возвращается

Предупреждение PHP: preg_match (): ошибка компиляции: запрещена кодовая точка Unicode (> = 0xd800 && <= 0xdfff) по смещению 127 в коде оболочки php в строке 1
BOOL (ложь)

Пожалуйста, помогите разрешить это предупреждение!

Любая помощь приветствуется!
Благодарю вас!

1

Решение

Если под буквами вы подразумеваете основные 28 символов языка, вам даже не нужно создавать класс символов на основе кодовой точки (вы можете создать его, набрав буквы вручную!).

Но если вы имеете в виду Arabic (060006FF, 255 символы), опять же, этот длинный класс символов не обеспечивает то, что вы хотите.

В любом случае вы можете пойти с этим:

/^(?!.*\d)[a-z\p{Arabic}\s]+$/iu

Примечание: вы можете проверить наличие различных блоков на арабском языке Вот.

1

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector