我有这个代码,并希望将字符限制为[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 限制,并且想要添加字符限制,如上所述。
实现这一目标的最佳方式是什么?
答案 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';
}