Регулярные выражения Unicode - не удается у 343 символов

StackOverflow https://stackoverflow.com/questions/3176825

Вопрос

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

Я ненаработал его до свойства символов p {p} unicode, который соответствует любому символу пунктуации.

Кто-то знает / видит, где проблема лежит, именно?

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

Это было полезно?

Решение

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

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)
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top