我使用下面的正则表达式来剔除任何非拉丁字符。结果,我发现如果我使用一个超过342个字符的字符串,函数就会失败,所有东西都会中止,网站连接也会被重置。
我将其范围缩小到\p{P} unicode字符属性,它可以匹配任何标点符号。
有没有人确切地知道/看到问题出在哪里?
preg_match('/^([\p{P}\p{S}&\p{Latin}0-9]|\s)*$/u', 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa');
发布于 2010-07-05 10:55:18
如果你要“剔除”非拉丁字符,为什么不这样做:
preg_replace('/[^\p{Latin}]+/u', '', $s)编辑:好的,所以你正在尝试验证输入。我想说的是,用这个:
preg_match('/^[\p{Latin}]+$/u', $s)...but结果是只匹配拉丁字母。我在想Java没有文档记录的速记,\p{L1},它匹配Latin1 (ISO-8859-1)字符集的所有内容,但在PHP语言中,您必须拼写出来:
preg_match('/^[\x00-\xFF]+$/u', $s)https://stackoverflow.com/questions/3176825
复制相似问题