Unicode正则表达式 - 以343个字符失败
-
02-10-2019 - |
题
我正在使用下面的正则表达式来清除任何非拉蛋白字符。结果,我发现,如果我使用大于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)
不隶属于 StackOverflow