Использование Юникода в регулярном выражении с PHP - PullRequest
1 голос
/ 29 декабря 2011

Я пытаюсь добавить символ Ö (U + 00D6) к своему регулярному выражению ниже. Очевидно, что-то идет не так, потому что это не работает с моей preg_match функцией.

Регулярное выражение, которое отлично работает:

/^([A-Z]{1})[a-z]{1,31}$/

Тот, который должен работать, но не работает:

/^([A-Z\x{00D6}]{1})[a-z]{1,31}$/

Я, очевидно, пытаюсь создать регулярное выражение, которое начинается с заглавной буквы, расширенной с Ö, за которой следуют строчные буквы. В общей сложности длина строки должна быть в пределах 2-32. Что не так с регулярным выражением, которое содержит выражение Unicode для Ö?

1 Ответ

2 голосов
/ 29 декабря 2011

\x{00D6} будет соответствовать только однобайтовому символу \xD6.Когда вы передаете строку в preg_match, она, скорее всего, кодируется в UTF-8, то есть \xC3 \x96.

. Вам необходимо использовать модификатор /u. для вашего регулярного выражения в поддержку этого.

/^([A-Z\x{00D6}]{1})[a-z]{1,31}$/u

Также {1} является декоративным, но излишним.

...