在PHP中使用正则表达式检查字符串格式

时间:2010-08-23 14:35:45

标签: php regex

我一直在尝试使用带有"/^[a-zA-Z0-9_-]+$/"的preg_match来确保给定的字符串只包含那里的字符而没有别的,但它似乎没有正确计算$以便它一直匹配到行的末尾,但它确实需要使用^。

在字符串的开头匹配

如果我使用{3,}代替+"/^[a-zA-Z0-9_-]{3,}$/"这是我最初的方式,我可以写3个字母/数字, - 或_然后除了以外的任何字符那些,它会被视为一场比赛。

代码:

  if(preg_match("/^[a-zA-Z0-9_-]+$/", $value, $arr) && strlen($value) > 3)
  {
   echo $good .' Ok';
  }
  else
  {
   echo $bad .' Invalid username. (letters & numbers only)';
  }

使用类似下面的内容作为$ value,它告诉我它应该是因为空格或&而出现无效的用户名。字符。

  

单词

     

字&安培;字

事实证明,这是因为价值是通过$ _GET发送到页面的,而“word& word”这样的$ value代之以“word”而不是......有没有办法解决这个问题?

2 个答案:

答案 0 :(得分:2)

  

事实证明,这是因为价值是通过$ _GET发送到页面的,而“word& word”这样的$ value代之以“word”而不是......有没有办法解决这个问题?

我在这里疯狂地猜测,您从浏览器调用http://yoursite/page.php?something=word&word的PHP页面正在读取$_GET['something']而不是预期的word word&word

嗯,这是因为文字符号符号被视为$ _GET参数分隔符,并且您要包含在参数值中的任何符号符号必须按%26进行网址编码,如http://yoursite/page.php?something=word%26word中所示。在PHP中,您可以使用函数urlencode()对字符串值进行编码:

$url = 'http://yoursite/page.php?something=' . urlencode('word&word');

答案 1 :(得分:0)

  

事实证明这是因为   值被发送到页面   通过$ _GET和$值的东西   如“word& word”出现为“word”   相反......有没有办法解决这个问题?

您需要在网址中对&符号进行编码:

[网址] /script.php?string=word&word

变为

[网址] /script.php?string=word&word

如果链接是由PHP生成的,请尝试使用urlencode

修改或尝试使用_POST。