【问题标题】:How to verify an input field using php如何使用php验证输入字段
【发布时间】:2016-11-16 05:33:54
【问题描述】:

如何验证用户在联系表格中输入的联系号码是否为实际号码且至少为 10 个号码?这意味着我希望输入字段只接受 10 个或更多数字,并且还接受加号 (+)。目前 php 验证所有字段均已填写且电子邮件正确。

这里是html代码:

            <div class="contact-form">
                <form id="contact-form" action="sendmail.php" method="post" title="Contact Form" role="form">
                    <div class="col-sm-6">
                        <div class="form-group">
                            <label for="contact-name">Full name</label>
                            <input type="text" name="name" placeholder="Enter your full name..." class="contact-name" id="contact-name">
                        </div>
                        <div class="form-group">
                            <label for="contact-email">Email</label>
                            <input type="text" name="email" placeholder="Enter your email..." class="contact-email" id="contact-email">
                        </div>
                        <div class="form-group">
                            <label for="contact-number">Contact number</label>
                            <input type="text" name="number" class="active" id="contact-number" placeholder="Your contact number...">
                        </div>
                    </div>
                    <div class="col-sm-6">
                        <div class="form-group">
                            <label for="contact-message">Message</label>
                            <textarea name="message" placeholder="Your message..." class="contact-message" id="contact-message"></textarea>
                        </div>
                    </div>
                    <div class="col-sm-12 text-center">
                        <button type="submit" class="btn btn-default sketchFlowPrint" id="submit">Send</button>
                    </div>
                </form>
          </div>

这里是php代码:

<?php

// Email address verification
function isEmail($email) {
    return preg_match('|^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]{2,})+$|i', $email);
};

if($_POST) {

    // Enter the email where you want to receive the message
    $emailTo = 'example@gmail.com';

    $clientName = addslashes(trim($_POST['name']));
    $clientEmail = addslashes(trim($_POST['email']));
    $number = addslashes(trim($_POST['number']));
    $message = addslashes(trim($_POST['message']));

    $subject = 'Query from My Domain';

    $sendMessage = 'Hi' . "\n\n";
    $sendMessage .= $message . "\n\n";
    $sendMessage .= 'From: ' . $clientName . "\n";
    $sendMessage .= 'Email: ' . $clientEmail . "\n";
    $sendMessage .= 'Contact number: ' . $number . "\n";

    $array = array();
    $array['nameMessage'] = '';
    $array['emailMessage'] = '';
    $array['numberMessage'] = '';
    $array['messageMessage'] = '';

    if($clientName == '') {
        $array['nameMessage'] = 'Please enter your full name.';
    }
    if(!isEmail($clientEmail)) {
        $array['emailMessage'] = 'Please insert a valid email address.';
    }
    if($number == '') {
        $array['numberMessage'] = 'Please enter a valid contact number.';
    }
    if($message == '') {
        $array['messageMessage'] = 'Please enter your message.';
    }
    if($clientName != '' && isEmail($clientEmail) && $message != '') {
    // Send email
    $headers = "From: " . $clientName . ' <' . $clientEmail . '>' . "\r\n";
    $headers .= PHP_EOL;
    $headers .= "MIME-Version: 1.0".PHP_EOL;
    $headers .= "Content-Type: multipart/mixed;".PHP_EOL;
    $headers .= " boundary=\"boundary_sdfsfsdfs345345sfsgs\"";
    mail($emailTo, $subject, $sendMessage, $headers);
    }

    echo json_encode($array);

}   else {
        header ('location: index.html#contact');
}

?>

这里是 jQuery:

// Contact form 
$('.contact-form form').submit(function(e) {
    e.preventDefault();

    var form = $(this);
    var nameLabel = form.find('label[for="contact-name"]');
    var emailLabel = form.find('label[for="contact-email"]');
    var numberLabel = form.find('label[for="contact-number"]');
    var messageLabel = form.find('label[for="contact-message"]');

    nameLabel.html('Full name');
    emailLabel.html('Email');
    numberLabel.html('Contact number');
    messageLabel.html('Message');

    var postdata = form.serialize();

    $.ajax({
        type: 'POST',
        url: 'sendmail.php',
        data: postdata,
        dataType: 'json',
        success: function(json) {
            if(json.nameMessage !== '') {
                nameLabel.append(' - <span class="red error-label"> ' + json.nameMessage + '</span>');
            }
            if(json.emailMessage !== '') {
                emailLabel.append(' - <span class="red error-label"> ' + json.emailMessage + '</span>');
            }
            if(json.numberMessage !== '') {
                numberLabel.append(' - <span class="red error-label"> ' + json.numberMessage + '</span>');
            }
            if(json.messageMessage !== '') {
                messageLabel.append(' - <span class="red error-label"> ' + json.messageMessage + '</span>');
            }
            if(json.nameMessage === '' && json.emailMessage === '' && json.numberMessage === '' && json.messageMessage === '') {
                form.fadeOut('fast', function() {
                    form.parent('.contact-form').append('<h2 class="text-center"><span class="orange">Thanks for contacting us!</span> We will get back to you very soon.</h2>');
                });
            } 
        }
    });
});

【问题讨论】:

  • "10 位数字"。 10 个数字将是“13 2345234 99 83 等...”。
  • 你真的应该使用 PHP 的 filter_varFILTER_VALIDATE_EMAIL 过滤器来验证电子邮件地址。您当前的正则表达式验证不正确。例如,它认为1@1.11 是一个有效的电子邮件地址。
  • 感谢您让我知道。我目前正在使用 FLITER_VALIDATE_EMAIL。

标签: php jquery html forms


【解决方案1】:

我猜+ 需要是第一个字符(国际电话号码)?

那么应该这样做:

if (!preg_match('/^(\+?)+([0-9]{10,})$/', $number)) {
    $array['numberMessage'] = 'Please enter a valid contact number.'
}

加号是可选的。如果需要,只需删除表达式中加号后的?

【讨论】:

  • 非常感谢。这正是我想要的。是的,+ 是可选的,用于国际电话号码。
  • 请随意检查它是否已回答。 :)
【解决方案2】:

检查长度是否小于 10 或查看输入是否与过滤后的输入不同(+ 和数字已删除)。

<?php
function valid_tel($in) {
    $valid = true;
    if(strlen($in) < 10 || $in !== preg_replace('@[^0-9+]@','', $in)) {
        $valid = false;
    }

    return $valid;
}
var_dump(valid_tel(''));
var_dump(valid_tel('01234'));
var_dump(valid_tel('01234567890')); // 11 long
var_dump(valid_tel('+012345678')); // 10 inc +
var_dump(valid_tel('+0123456'));
var_dump(valid_tel('0123456xyz7890'));

输出:

boolean false
boolean false
boolean true
boolean true
boolean false
boolean false

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-10-20
    • 2021-12-11
    • 2014-03-08
    • 1970-01-01
    • 1970-01-01
    • 2021-08-13
    • 2017-03-30
    相关资源
    最近更新 更多