1

我正在使用下面的正则表达式来清除任何非拉丁字符。结果,我发现如果我使用大于 342 个字符的字符串,函数就会失败,一切都会中止,并且网站连接会被重置。

我把它缩小到 \p{P} unicode 字符属性,它匹配任何标点符号。

有谁知道/看到问题出在哪里?

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

4

1 回答 1

1

如果您要“清除”非拉丁字符,为什么不这样做:

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)
于 2010-07-05T02:55:17.910 回答