要使用正则表达式断言字符串的结尾,可以使用$
从我读过的内容来看,这正是它的作用:
$断言字符串末尾的位置,或者在字符串末尾的行终止符之前(如果有的话)
所以这意味着它并不完全正确,例如,如果我在使用\n
时将$
附加到字符串中,则不会产生任何影响。
在我的情况下,这将是我的PHP代码中的安全漏洞,因为我使用此正则表达式在注册时验证字母数字用户名:
/^[a-zA-Z0-9]+$/
有没有办法严格断言当且仅当它是带有正则表达式的字符串的结尾?
答案 0 :(得分:2)
至少有两种方法可以确保在字符串的最后与PCRE正则表达式匹配。
您可以使用匹配在字符串最后的\z
锚点:
/^[a-zA-Z0-9]+\z/
或者,您可以使用D
修饰符:
/^[a-zA-Z0-9]+$/D
PCRE_DOLLAR_ENDONLY
修饰符D
在字符串末尾的$
锚点匹配(不包括字符串中最后一行换行符之前的位置) ,即充当\z
锚。