PHP中的数字输入验证

PHP中的数字输入验证,php,Php,我正在尝试验证php表单中的帐号输入。它应该包含8个数字和'-'可选。如果存在“-”,则应忽略它。 按下Submit按钮后,假设在表单上方显示警告消息,以防输入无效 请帮忙 这是我到目前为止得到的,但我不确定这是否正确,也不知道如何在表单上方显示警告消息 $acctnum= "$acctnum"; if(empty($acctnum)){ echo "You did not enter an account number, please re-enter"; } else if(!pre

我正在尝试验证php表单中的帐号输入。它应该包含8个数字和'-'可选。如果存在“-”,则应忽略它。 按下Submit按钮后,假设在表单上方显示警告消息,以防输入无效

请帮忙

这是我到目前为止得到的,但我不确定这是否正确,也不知道如何在表单上方显示警告消息

$acctnum= "$acctnum";

if(empty($acctnum)){
  echo "You did not enter an account number, please re-enter"; }

else if(!preg_match("\-^[0-9]{8}", $acctnum)){
  echo "Your account number can only contain eight numbers. Please re-enter."; }

谢谢大家!

你似乎没有尝试。没有任何文档或教程会告诉您创建这样的正则表达式。首先,分隔符在哪里?为什么
-
在字符类之外时被转义,因此没有特殊意义?那在那里做什么

这应该做到:

$acctnum = str_replace("-","",$acctnum);
if( !preg_match("/^\d{8}$/",$acctnum)) echo "Error...";

由于regex非常昂贵,我想改为:

$acctnum = (int) $acctnum; // this automatically ignore the '-'
if ($acctnum < 0) $acctnum = -$acctnum;
$digits = ($acctnum == 0) ? log10($acctnum) + 1 : 1;
if ($digits === 8) { ... }
$acctnum=(int)$acctnum;//这会自动忽略“-”
如果($acctnum<0)$acctnum=-$acctnum;
$digits=($acctnum==0)?log10($acctnum)+1:1;
如果($digits==8){…}

将任务一分为二。首先用
str\u replace
去掉“-”,然后检查数字

$match = preg_match("/^\d{8}$/", str_replace("_", "", $str));
if ($match > 0) {
    // Correct
} else {
    // incorrect
}

这不是一个有效的正则表达式,您缺少分隔符。只有一个“-”或几个分隔符?您能保证您的所有帐户将来都有八位数字吗?分配的条件是帐户号码必须有八位数字。这将删除多个
-
,不允许只有一位。在这里使用断言可能更好。但是OP一开始可能只是指可选(?)谢谢!它应该去掉多个'-'。Kolink,谢谢!实际上我试过很多其他的选择。我写的只是其中之一。我没有考虑str_replace(),没有使用分隔符。我认为对于这个简单的任务,正则表达式不会有性能问题。而且它比你的代码更可读。那么前导零呢?@yunzen,因为没有人告诉我可能有前导零,而且考虑到
$acctnum
似乎是一个计数整数,这个解决方案更快。如果它不是OP解决方案,至少我会把它留给未来的观众。