我正在使用下面的正则表达式来清除任何非拉蛋白字符。结果,我发现,如果我使用大于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)

...但是事实证明只与拉丁语匹配 信件. 。我在想爪哇的无证件速记, \p{L1}, ,它与Latin1(ISO-8859-1)字符集中的所有内容相匹配,但是在PHP中,您必须拼写出来:

preg_match('/^[\x00-\xFF]+$/u', $s)
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top