2015-05-07 2 views
-2

Я в настоящее время имеют следующее регулярное выражение для проверки на ввод в company name в форме:Преобразование регулярных выражений для учета международных символов

$regexpRange = $min.','.$max; 
$regexpPattern = '/^(?=[A-Za-z\d\'\s\,\.]{'.$regexpRange.'}$)(?=.*[a-z\d])[a-zA-Z\d]+[A-Za-z\d\'\s\,\.]+$/m'; 

Мне нужно обновить это международные стандарты для обеспечения международных символов. У меня нет опыта работы с этим

Может кто-нибудь помочь мне понять, как это решить?

+0

Быстро, я напишу '$ p = '~ \ A \ p {Xan} [\ p {Xan} \ s \' ,.] {'. ($ min-1). ','. ($ max-1). '} \ z ~ u'; '(нижний и верхний регистр здесь более не актуальны) –

ответ

2

Вот необходимые шаги:

  • Используйте опцию u шаблон. Включается PCRE_UTF8иPCRE_UCP (РНР документы забывают упомянуть, что один):

    PCRE_UTF8

    Эта опция заставляет PCRE рассматривать как образец и предмет как строки UTF-8 символов вместо однобайтовых строк. Тем не менее, он доступен только тогда, когда PCRE построен для поддержки UTF. Если нет, использование этой опции вызывает ошибку. Подробная информация о том, как эта опция изменяет поведение PCRE, приведена на странице pcreunicode.

    PCRE_UCP

    Эта опция изменяет способ PCRE процессов \B, \b, \D, \d, \S, \s, \W, \w, и некоторые из классов символов POSIX. По умолчанию распознаются только символы ASCII, но если установлен параметр PCRE_UCP, для классификации символов используются свойства Unicode. Более подробная информация приведена в разделе об общих типах символов на странице pcrepattern. Если вы установите PCRE_UCP, то сопоставление одного из элементов, на которые оно влияет, занимает гораздо больше времени. Этот параметр доступен только в том случае, если PCRE был скомпилирован с поддержкой свойств Unicode.

  • \d будет делать только штрафом с PCRE_UCP (это эквивалентно \p{N} уже), но вы должны заменить эти [a-z] диапазоны для учета умлаутов:

    • Заменить [a-zA-Z] с \p{L}
    • Заменить [a-z] с \p{Ll}
    • Заменить [A-Z] на \p{Lu}

    \p{X} означает: персонаж из Unicode category X, где L означает письмо, Ll означает строчной буквы и Luозначает заглавную букву. Вы можете получить список от the docs.

    Обратите внимание, что вы можете использовать \p{X} внутри класса символов: [\p{L}\d\s] например.

  • И убедитесь, что вы используете кодировку UTF8 для своих строк в PHP. Кроме того, убедитесь, что вы используете функции Unicode для обработки этих строк.

Смежные вопросы