如何防止[a-z]类型的正则表达式匹配控制字符

时间:2017-05-10 08:46:12

标签: php regex

最近我在php中使用[a-z]类范围regexp。我不知道为什么,但它不是只匹配一个到z的字符,而是匹配控制字符。 例:

preg_match("#^[a-z]{0,3}$#", "aa\n")

返回1.(我在php 5.6上)。 我想阻止控件字符匹配。我用[:^ cntrl:]完成了一些测试而没有多少成功。 请有人帮助我。 提前谢谢。

1 个答案:

答案 0 :(得分:2)

$锚点可以在字符串的末尾匹配,也可以在字符串中的最后一个换行符之前匹配。

使用/D PCRE_DOLLAR_ENDONLY 修饰符:

preg_match("#^[a-z]{0,3}$#D", "aa\n")
                         ^

\z锚点匹配字符串的结尾

preg_match("#^[a-z]{0,3}\z#", "aa\n")

PHP test

echo preg_match("#^[a-z]{0,3}$#", "aa\n");  // => 1
echo preg_match("#^[a-z]{0,3}$#D", "aa\n"); // => 0
echo preg_match("#^[a-z]{0,3}\z#", "aa\n"); // => 0