Регулярные выражения Unicode - с ошибками в 343 символа - PullRequest
1 голос
/ 05 июля 2010

Я использую регулярное выражение ниже, чтобы отсеять все нелатинские символы.В результате я обнаружил, что если я использую строку длиной более 342 символов, функция завершается сбоем, все прерывается, и соединение с веб-сайтом сбрасывается.

Я унаследовал ее до символа Unicode \ p {P}свойство, которое соответствует любому знаку пунктуации.

Кто-нибудь знает / видит, где именно находится проблема?

preg_match('/^([\p{P}\p{S}&\p{Latin}0-9]|\s)*$/u', 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa');

1 Ответ

1 голос
/ 05 июля 2010

Если вы «отсеиваете» нелатинские символы, почему бы просто не сделать это:

preg_replace('/[^\p{Latin}]+/u', '', $s)

РЕДАКТИРОВАТЬ: Хорошо, значит, вы пытаетесь подтвердить ввод.Я собирался сказать, используйте это:

preg_match('/^[\p{Latin}]+$/u', $s)

... но оказывается, что это соответствует только латинским буквам .Я думал о недокументированном сокращении Java, \p{L1}, которое соответствует всему в наборе символов Latin1 (ISO-8859-1), но в PHP вы должны это прописать:

preg_match('/^[\x00-\xFF]+$/u', $s)
...