Соответствие символов символов Unicode в PCRE / PHP

Я пытаюсь написать достаточно разрешительный валидатор для имен в PHP, и моя первая попытка состоит из следующего шаблона:

// unicode letters, apostrophe, hyphen, space
$namePattern = "/^([\p{L}'\- ])+$/";

Это событие eventpreg_match (), переданное на вызов p{L}. Насколько я могу судить, это работает с вашим ванильным алфавитом ASCII, b // unicode letters, apostrophe, hyphen , space $ namePattern = '/ ^ [- ' p {L}] + $ / u ' ; t кажется, что поездка pMp на более spicier символы как A или?.

Что-то не так с самим шаблоном? Возможно, я рассчитываю array_map('dechex', utf8ToUnicode($text))сделать больше работы, чем я думаю?

Или это имеет какое-то отношение к способу ввода данных? Я не уверен, что это актуально, но я обязательно указал кодировку UTF8 на странице формы.

php,regex,unicode,pcre,character-properties,

12

Ответов: 3


23 ов принято

Я думаю, что проблема намного проще: вы забыли указать u модификатор . Свойства символа Юникода доступны только в режиме UTF-8 .

Ваше регулярное выражение должно быть:

old pattern

0

Прежде всего, ваша жизнь будет намного проще, если вы будете использовать одиночные апострофы вместо двойных кавычек при написании их - вам нужна только одна обратная косая черта. Во-вторых, new patternследует также включить комбинированные метки . Если вы найдете символ, который не соответствует, пожалуйста, узнайте его код кода Unicode, а затем вы можете использовать http://www.fileformat.info/info/unicode/, чтобы выяснить, где он находится. Я нашел http://hsivonen.iki.fi/php-utf8/ бесценный инструмент при отладке с помощью свойств UTF-8 (не забудьте перевести его в hex, прежде чем пытаться искать:) .$text = preg_replace('/old pattern/u', 'new pattern', $text);

Например, A оказывается http://www.fileformat.info/info/unicode/char/0102/index.htm и находиться в Лу, и поэтому L должен соответствовать ему, и он подходит для меня. Другой символ - http://www.fileformat.info/info/unicode/char/5f20/index.htm, а также isLetter и действительно подходит для меня. У вас есть таблицы символов Unicode, скомпилированные в?


0

Если вы хотите заменить Unicode uс php versionвы должны написать:

PHP 4.3.5

Итак, ключ здесь - uмодификатор

Примечание . Ваш сервер AgreeOrNotдолжен быть не менееu

как упоминалось здесь php.net | Модификаторы шаблонов

u (PCRE_UTF8) Этот модификатор включает дополнительные функции PCRE, которые несовместимы с Perl. Строки шаблонов рассматриваются как UTF-8. Этот модификатор доступен с PHP 4.1.0 или выше в Unix и с PHP 4.2.3 на win32. Срок действия шаблона UTF-8 проверяется с PHP 4.3.5.

Спасибо, uкто дал мне этот ключ здесь. Preg_replace сопоставить целые слова в арабском

Я пробовал это, и он работал в localhost, но когда я пытаюсь использовать его на удаленном сервере, это не сработало, и я обнаружил, что php.net начинает использовать uмодификатор в PHP 4.3.5. , Я обновляю версию php, и она работает

Важно знать, что этот метод очень полезен для арабских пользователей (????), потому что, как я считаю, unicode - лучший кодировщик для арабского языка, а замена не будет работать, если вы не используете uмодификатор, см. Следующий например, он должен работать с вами

$text = preg_replace('/????? ??/u', 'NEW', $text);

PHP, регулярные выражения, юникодовый, PCRE, характер-свойство,
Похожие вопросы