【发布时间】:2017-09-14 21:33:28
【问题描述】:
我想用 php 验证这个表单。我想使用正则表达式和 strlen() 函数。 这是表格 ===>
<form class="form" action="index.php" method="post" name="form">
<p class="form_field">
<label>Name :</label>
<input class="input" type="text" name="name" placeholder="Name">
* <?php echo $nameErr; ?><br>
</p>
<p class="form_field">
<label>Email :</label>
<input class="input" type="text" name="email" placeholder="Email">
* <?php echo $emailErr; ?><br>
</p>
<p class="form_field">
<label>Gender :</label>
<input class="radio" type="radio" name="gender"> male
<input class="radio" type="radio" name="gender"> female
* <?php echo $genderErr; ?><br>
</p>
<p class="form_field">
<label>Website :</label>
<input type="text" name="website" placeholder="Website">
<?php echo $websiteErr; ?> <br>
</p>
<p class="form_field">
<label>Comment :</label>
<textarea rows="5" cols="30" name="comment" placeholder="your comment ..."></textarea>
* <?php echo $commentErr; ?> <br>
</p>
<input class="submit" type="submit" name="submit" placeholder="Submit" >
这是我的 php 函数来验证它 ==>
function validate_forms($user_input, string $field){
$input_length = strlen($user_input);
if($field = "name"){
if($input_length > 8){
$message = "the name should be less than 32 characters";
} else{
if( !preg_match("/^[A-Za-z. ]*$/", $user_input) ){
$message = "Only letters and white space are allowed ";
} else {
$get_input = $user_input;
}
}
} elseif ($field = "URL") {
if(!preg_match("/(?:https?:\/\/)?(?:[a-zA-Z0-9.-]+?\.(?:[a-zA-Z])|\d+\.\d+\.\d+\.\d+)/", $_POST['website'])){
$message = "Please enter a valid url ";
} else {
$get_input = $user_input;
}
} elseif ($field = "email") {
if (!filter_var($_POST['email'], FILTER_VALIDATE_EMAIL)) {
$emailErr = "Invalid email format";
} else {
$get_input = $user_input;
}
}
return $message;}
我想要完成的是让我的函数在不满足任何条件时返回 $message 变量,如果满足所有条件则获取并返回 $user_input。
我认为可以返回一个数组,但我不知道如何。
另外我认为我不尊重这里的最佳实践,所以你能帮助理解验证我的表单的最佳方法(一种更快速、更安全的方法)会非常好
这是为了学习目的,所以欢迎任何更多信息或书籍,教程和课程推荐。提前谢谢你
PS:我知道在这种情况下,面向对象的方法会更好,但我想先学习过程方法。
【问题讨论】:
-
很多人的名字都会让你的 chcek 失败
-
长度和字符限制都是不现实的。 kalzumeus.com/2010/06/17/…
-
比较运算符需要双等号'=='
-
@rtfm 谢谢你,这是一篇很有帮助的文章,我知道 8 个字符的名字是不现实的,但我不知道我的正则表达式也是。那么你推荐什么长度和字符限制?非常感谢。
标签: php regex forms function validation