我喜欢这个preg_match使用我的filter_validate_int

时间:2015-10-22 13:05:44

标签: php validation

我花了很多时间在这个PHP代码中使用这个表单来工作,我现在问你Stackoverflow。

我有这个代码,我试图插入一个电话输入表格,我已经成功地使用正确长度的8位电话号码正确验证。 (例如12345678)

HTML

<form action="index.php" method="post">
    <legend>Sign up here.</legend>
    <label>Name  <input type="text" name="na" /></label><br>
    <label>Email <input type="text" name="em" /></label><br>
    <label>Phone <input type="number" name="ph" pattern=".{0}|.{8}" /></label><br>
    <input type="submit" value="Sign Up" /></form>

PHP     

$nam = filter_input(INPUT_POST, 'na', FILTER_SANITIZE_STRING)
or die('Please insert a name.');

$ema = filter_input(INPUT_POST, 'em', FILTER_VALIDATE_EMAIL)
or die('The email you typed is not valid.');

$pho = filter_input(INPUT_POST, 'ph', FILTER_VALIDATE_INT)
or die('Phone number was incorrect. It must contain 8 numbers.');

if(preg_match('/[0-9] {8}/', $pho));





        echo 'Hello ' . $nam . ' we registered your mail as ' . $ema . ' and your phone number as ' . $pho . '<br>' . PHP_EOL;



    $sql = 'INSERT INTO signup (name, email, phone) VALUES (?,?,?)';
    $stmt = $link->prepare($sql);
    $stmt->bind_param('sss', $nam, $ema, $pho);
    $stmt->execute();

    $link->close();

?>

当我插入并提交我的表单时,它不会注册preg_match,并且无论如何都要插入0到7个长度的数字。

代码在添加手机部分之前有效,如果没有效果,则不会插入姓名和/或电子邮件。

1 个答案:

答案 0 :(得分:0)

我认为正则表达式中的额外空格会导致这种行为。

也许这会奏效:

if(preg_match('/[0-9]{8}/', $pho)) {
    echo 'Hello ' . $nam . ' we registered your mail as ' . $ema . ' and your phone number as ' . $pho . '<br>' . PHP_EOL;
};

http://php.net/manual/en/function.preg-match.php