所以我几乎完全正常工作了。我坚持的一件事是从 preg_match开始。我在这里阅读了手册http://php.net/manual/en/function.preg-match.php,但它并没有完全描述我创建自己的验证的语法。 示例:对于文本区域,如果我只想允许空格,字母,数字和某些特殊字符(不太可能)。这是代码
<?php
if(isset($_POST['name'])
&& isset($_POST['phone'])
&& isset($_POST['email'])) {
if (empty($_POST["name"])) {
$nameErr = "Name is required";
}
else {
$name = $_POST["name"];
// check if name only contains letters and whitespace for name
if (!preg_match("/^[a-zA-Z ]*$/",$name)) {
$nameErr = "Only letters and white space
allowed";
}
}
if (empty($_POST["phone"])) {
$phoneErr = "Phone number is required";
}
else {
$phone = $_POST["phone"];
// check if phone only contains numbers for phone
if (!preg_match('/^\(?[\d]{3}\)?\s?\-?[\d]{3}\s?\-?[\d]
{4}$/', $phone)) {
$phoneErr = "Only numbers allowed";
}
}
if (empty($_POST["email"])) {
$emailErr = "Email is required";
}
else {
$email = $_POST["email"];
// check if e-mail address is well-formed
if (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
$emailErr = "Invalid email format";
}
}
if($nameErr or $emailErr or $phoneErr){
echo $nameErr;
echo $phoneErr;
echo $emailErr;
die();
}
else if($data = $_POST['name'] . "\n" .
$_POST['email'] . "\n" .
$_POST['phone'] . "\n" .
$_POST['county'] . "\n" .
$_POST['floor'] . "\n" .
$_POST['descr'] . "\n"){
echo "Thank you for your inquery!" . "<br/>" .
"An estimator will be with you shortly.";
mail('theshadowcallsu@gmail.com', 'Estimation Request',
$data);
}
}
?>
答案 0 :(得分:1)
preg_match
会将正则表达式模式应用于字符串,以查看模式是否与字符串匹配
对于输入验证,您将尝试仅按任何顺序匹配所需的字符,如果匹配失败(即,不允许使用某个字符),则输入包含未在字符串模式中声明的字符以匹配
例如:
if (!preg_match("/^[a-zA-Z ]*$/",$name)) {
$nameErr = "Only letters and white space allowed";
}
它匹配仅包含a-z
和A-Z
的字母以及空格的字符串。如果字符串包含其他内容,则不会匹配它。
对于文本区域,这样的事情可以解决问题:
if (!preg_match("/^[a-zA-Z0-9 \(\)\n]*$/",$name)) {
$nameErr = "not allowed";
}
它的作用:
^
:字符串的开头$
:字符串结尾[a-zA-Z0-9 \(\)\n]
:匹配字母a-z
,A-Z
,数字0-9
,(
,)
,新行。
\n
:直线返回\(
和\)
:Literraly字符(
和)
,因为括号用于捕获匹配字符串中的组您可以在[]
想要允许的字符之间添加。