在发送表单之前验证号码和电子邮件字段

时间:2014-01-15 17:03:12

标签: php html forms validation

我是PHP的新手,很抱歉,如果我的问题看起来有点愚蠢。我正在创建一个工作良好的联系表单,但我需要验证两个字段;电话号码和电子邮件地址,我需要它来检查电话号码字段只有数字,长度是11位数。电子邮件字段需要是“某事”@“某事”。“某事”。

如果可能的话我宁愿只使用html或php(最简单的那个),我想如果有办法将验证放入字段属性,这将是最简单的方法吗?例如:在这里:

<input type="text" name="email" id="email" class="text" form="contact_form" required/>

如果那是不可能的话,可能在我的PHP文件中看起来像这样:

<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>Submitting...</title>
</head>
<body>
<?php
$Name = $_POST ['full_name'];
$Email = $_POST['email'];
$Number = $_POST['phone_number'];
$Company = $_POST['company_name'];
$Message = $_POST['message'];
$formcontent="Name: $Name
\n Email: $Email 
\n Number: $Number
\n Company: $Company
\n Message: $Message";
$recipient = "info@vicarage-support.com";
$subject = "Contact";
$mailheader = "From: $Email \r\n";
ini_set("sendmail_from","info@vicarage-support.com");
mail($recipient, $subject, $formcontent, $mailheader) or die("Please try again.");
echo("Form Submitted.");
?>
<script type="text/JavaScript">
<!--
setTimeout("location.href = 'http://www.vicarage-support.com/contact_us.html';",3000);
-->
</script>
</body>
</html>

提前谢谢。

3 个答案:

答案 0 :(得分:2)

有两种方法可以在提交之前检查表单数据,即客户端:使用JavaScript,并使用input element的新(HTML5)HTML属性。如果需要,它们可以一起使用。它们都不能保证有效数据;客户端检查应被视为对用户的方便,而不是确保数据有效性的方法(您需要检查服务器端,在本例中是PHP代码)。

HTML方式可以通过这种方式举例说明:

<input type="email" name="email" id="email" class="text" form="contact_form" 
   required>
<input type="tel" name="tel" id="tel" class="text" form="contact_form" 
   required pattern="\d{11}" label="11 digits">

使用type="email"表示符合标准的浏览器会检查电子邮件地址格式。这是一项非常重要的任务。使用type="tel" 强加格式限制(格式因国家/地区和权限而异),但可能会使浏览器使用更好的用户界面(例如触摸屏设备中的数字小键盘)。限制由pattern属性强加。值\d{11}表示正好是11位数。 (这是糟糕的可用性。我认为你应该允许空格,也可能是括号和其他字符,并将它们剥离在服务器上。输入一个没有任何分组的11位数字太难了.11个数字听起来是任意的。)

在JavaScript中实现相同的方法有几种。模式检查很简单,而电子邮件格式检查非常困难,并且有不同的库例程。一般来说,检查应该是相当宽松的,基本上只是检查是否有“@”字符。

答案 1 :(得分:0)

如果您要在>之前验证此表单,则必须使用javascript完成。但是,您仍应检查服务器端代码,因为可能会禁用javascript,这会导致javascript验证无效。

我过去曾经用过这个,很适合我的需要。 http://validval.frebsite.nl/

答案 2 :(得分:0)

尝试添加三个变量。首先添加一个$pattern变量,然后添加两个变量并使用switch函数。

有点像......

<?php



      $what = what you are checking (phone, email, etc)
      $data = the string you want to check

    function isValid( $what, $data ) {

        switch( $what ) {


            case 'Number':
                $pattern = "/^([1]-)?[0-9]{3}-[0-9]{3}-[0-9]{4}$/i";
            break;
             //Change to a valid pattern, or configure it the way you want.

            case 'Email':
                $pattern = "/^[_a-z0-9-]+(.[_a-z0-9-]+)*@[a-z0-9-]+(.[a-z0-9-]+)*(.[a-z]{2,3})$/i";
            break;

            default:
                return false;
            break;

这显示了你想要的东西。现在尝试验证它... ...

  }

    return preg_match($pattern, $data) ? true : false;

}

$errors = array();

if( isset($_POST['btn_submit']) ) {

    if( !isValid( 'phone', $_POST['Number'] ) ) {
        $errors[] = 'Please enter a valid phone number';        
    }

    if( !isValid( 'email', $_POST['Email'] ) ) {
        $errors[] = 'Please enter a valid email address';       
    }

}

if( !empty($errors) ) {
    foreach( $errors as $e ) echo "$e <br />";
}
?>

如您所见,这将验证您的表单。您可能需要对其进行配置,以便将$pattern设置为您想要的值。这可能不是最好的方法,我推荐使用Javascript,但这是你用PHP和HTML做的方法。