0
  1. if(preg_match("^[A-Za-z0-9 _]*$^",'name'))-> 1

  2. if(preg_match("^[A-Za-z0-9 _]*$^",'name--'))-> 1 //应该是零。在 js 中工作,但在 php 中工作

第一种情况很好。但在第二种情况下,我希望它为零,但 preg_match 输出 1。这个正则表达式可以在 js 中按我的意愿工作。我使用的 PHP 代码有什么问题?

4

2 回答 2

1

量词匹配类中的*零个字符,[A-Za-z0-9 _]然后是输入的结尾。结果应该不足为奇;正则表达式“按预期”工作。

添加输入锚的开始会使匹配按预期失败:

preg_match("^\\^[A-Za-z0-9 _]*$^",'name--')

当然,使用经典/分隔符可能会更好,因为使用^(作为分隔符,将在正则表达式的开头使用)恕我直言,这是自找麻烦:

preg_match("/^[A-Za-z0-9 _]*$/",'name--')
于 2012-10-02T10:27:08.657 回答
1

^用作分隔符,什么是......不太好,因为它也是起始锚。因此,您没有起始锚点,这意味着它*正好涵盖 0 个字符,什么是有效的。

~^[a-z0-9 _]*$~i
于 2012-10-02T10:34:39.157 回答