$ _POST中的字符限制

时间:2013-12-29 05:34:16

标签: php mysql regex post

我有这个代码,并希望将字符限制为[a-f] [A-F] [0-9]

$code = mysql_real_escape_string($_POST['dgt']);
$len = strlen($code);
if (!($len == "32" or $len == "40")) {
   print "This is not a valid code.";
} else {
   echo 'success';
}

现在它有一个字符 LENGTH 限制,并且想要添加字符限制,如上所述。

实现这一目标的最佳方式是什么?

3 个答案:

答案 0 :(得分:3)

甚至可以在单个正则表达式中完成字符和长度断言:

if (preg_match('/^([[:xdigit:]]{8}){4,5}$/i')) {
    // valid
}

这将匹配4 * 8(= 32)或5 * 8(= 40)hexdigits。


顺便说一下,你应该在将它插入SQL字符串之前或之前应用mysql_real_escape_string。这里没什么区别,特别是因为值已经被断言。但是在SQL转义之后修改字符串可能在某些情况下撤消转义。 无论如何,您可能希望阅读parameterized queries。那会使这个说明多余。

答案 1 :(得分:2)

为什么不使用简单的正则表达式?

    if(preg_match('/[^a-f_\-0-9]/i', $code)) //if this regex doesn't work , make use of /[^a-fA-F0-9]/
    {
      if(strlen($code)==32 || strlen($code)==40)
      {
      echo "This is not a valid code.";
      }
    }
    else
    {
    echo 'Success.';
    }

答案 2 :(得分:0)

  $code = mysql_real_escape_string($_POST['dgt']);
  $len = strlen($code);  

  if (!($len == "32" or $len == "40") or preg_match('/[^a-fA-F0-9]+/i', $code)){
      print "This is not a valid code.";
  } else {
      echo 'success';
  }