当且仅当字符串结束时

时间:2017-08-08 14:35:22

标签: php regex security

要使用正则表达式断言字符串的结尾,可以使用$

从我读过的内容来看,这正是它的作用:

$断言字符串末尾的位置,或者在字符串末尾的行终止符之前(如果有的话)

所以这意味着它并不完全正确,例如,如果我在使用\n时将$附加到字符串中,则不会产生任何影响。

在我的情况下,这将是我的PHP代码中的安全漏洞,因为我使用此正则表达式在注册时验证字母数字用户名:

/^[a-zA-Z0-9]+$/

有没有办法严格断言当且仅当它是带有正则表达式的字符串的结尾?

1 个答案:

答案 0 :(得分:2)

至少有两种方法可以确保在字符串的最后与PCRE正则表达式匹配。

您可以使用匹配在字符串最后的\z锚点:

/^[a-zA-Z0-9]+\z/

或者,您可以使用D修饰符:

/^[a-zA-Z0-9]+$/D

PCRE_DOLLAR_ENDONLY修饰符D字符串末尾的$锚点匹配(不包括字符串中最后一行换行符之前的位置) ,即充当\z锚。