欢迎访问宙启技术站
智能推送

PHP函数之filter_var:如何验证输入数据的正确性?

发布时间:2023-06-12 11:11:55

在进行Web开发或者其他需要收集用户输入数据的场景中,数据验证变得至关重要。不仅可以防止用户恶意篡改数据,还可以增强代码的可靠性和安全性。PHP函数库中的filter_var函数可以实现数据验证的目的。

一、filter_var函数基本概述

filter_var函数是PHP中的一个过滤器函数,可以用于过滤和验证用户输入的数据。它的语法如下:

mixed filter_var ( mixed $value , int $filter = FILTER_DEFAULT , mixed $options =[])

value:待验证的数据,可以是字符串、整型、浮点型等数据类型。

filter:要使用的过滤器的类型,可以是预置的常量或自定义过滤器名称。默认情况下,为 FILTER_DEFAULT。

options:指定过滤器选项的数组,该参数可选。

二、filter_var函数常用的过滤器

1、FILTER_VALIDATE_BOOLEAN:验证一个布尔型的值。如果该值是布尔型,返回布尔true或false。如果字符串表示的是"1"、"true"、"on"、"yes",也会返回布尔型的true;如果字符串表示的是""、"0"、"false"、"off"、"no",也会返回布尔型的false。

示例:

echo filter_var("yes", FILTER_VALIDATE_BOOLEAN);  // 输出:true

echo filter_var("off", FILTER_VALIDATE_BOOLEAN); // 输出:false

2、FILTER_VALIDATE_EMAIL:验证一个电子邮件地址。如果该值符合标准的电子邮件地址格式,返回该电子邮件地址。否则,返回 false。

示例:

echo filter_var("test@example.com", FILTER_VALIDATE_EMAIL); // 输出:test@example.com

3、FILTER_VALIDATE_FLOAT:验证一个浮点数。如果该值是一个符合浮点数格式的值,返回该浮点数。否则,返回 false。

示例:

echo filter_var("3.14", FILTER_VALIDATE_FLOAT); // 输出:3.14

4、FILTER_VALIDATE_INT:验证一个整型数值。如果该值可以转换为整型数值,返回该整型数值。否则,返回 false。

示例:

echo filter_var("123", FILTER_VALIDATE_INT); // 输出:123

5、FILTER_VALIDATE_IP:验证一个IP地址。如果该值是一个合法的IP地址,返回该IP地址。否则,返回 false。

示例:

echo filter_var("127.0.0.1", FILTER_VALIDATE_IP); // 输出:127.0.0.1

6、FILTER_VALIDATE_REGEXP:使用正则表达式对数据进行验证。如果该值与指定的正则表达式匹配,则返回该值,否则,返回 false。

示例:

$email = "test@example.com";

if(filter_var($email, FILTER_VALIDATE_REGEXP, array("options"=>array("regexp"=>"/@[a-z]+\.[a-z]+/"))))

{

    echo "Valid email";

}

else

{

    echo "Invalid email";

}

7、FILTER_SANITIZE_EMAIL:过滤电子邮件地址的特殊字符,并转换为HTML实体。

示例:

$subject = "test";

$body = "This is test email";

$mailBody = filter_var($body, FILTER_SANITIZE_EMAIL);

echo $mailBody;

8、FILTER_SANITIZE_NUMBER_FLOAT:过滤字符串中的字符,只保留数字和小数点。如果该值不是一个浮点数格式的值,会自动把整数转换为浮点数形式。

示例:

$price = "$10.58";

$priceNumber = filter_var($price, FILTER_SANITIZE_NUMBER_FLOAT, FILTER_FLAG_ALLOW_FRACTION);

echo $priceNumber;

9、FILTER_SANITIZE_STRING:删除字符串中的HTML标签和特殊字符,返回纯文本字符串。

示例:

$str = "<p>Hello World!$&^#</p>";

echo filter_var($str, FILTER_SANITIZE_STRING);

三、filter_var函数结合表单验证

在进行WEB开发中,我们经常需要对表单中输入的数据进行验证,可以用filter_var函数实现。下面是一个表单验证的示例代码:

<form method="post" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>">

  Name: <input type="text" name="name"><br>

  Email: <input type="email" name="email"><br>

  Website: <input type="url" name="url"><br>

  Comment: <textarea name="comment"></textarea><br>

  Gender:

  <input type="radio" name="gender" value="male">Male

  <input type="radio" name="gender" value="female">Female<br>

  <input type="submit" name="submit" value="Submit">

</form>

<?php

if ($_SERVER["REQUEST_METHOD"] == "POST") {

  $name = filter_var($_POST["name"], FILTER_SANITIZE_STRING);

  $email = filter_var($_POST["email"], FILTER_VALIDATE_EMAIL);

  $website = filter_var($_POST["url"], FILTER_VALIDATE_URL);

  $comment = filter_var($_POST["comment"], FILTER_SANITIZE_STRING);

  $gender = filter_var($_POST["gender"], FILTER_SANITIZE_STRING);

  

  if (empty($name) || empty($email) || empty($website) || empty($comment) || empty($gender)) {

    echo "All fields are required";

  } else {

    echo "Name: " . $name ."<br>";

    echo "Email: " . $email ."<br>";

    echo "Website: " . $website ."<br>";

    echo "Comment: " . $comment ."<br>";

    echo "Gender: " . $gender ."<br>";

  }

}

?>

在上面的代码中,用filter_var函数对表单提交的数据进行了验证和过滤。其中,对输入的数据进行了以下验证:

验证$name是否为空,并使用FILTER_SANITIZE_STRING过滤。

验证$email是否为邮箱格式,并使用FILTER_VALIDATE_EMAIL验证。

验证$website是否为正确的URL格式,并使用FILTER_VALIDATE_URL验证。

使用FILTER_SANITIZE_STRING过滤$comment和$gender的特殊字符。

使用empty()判断所有字段是否为空。

根据验证结果,输出相应的信息或者错误提示。

四、总结

通过本文的示例,可以看出,filter_var函数可以实现对用户输入数据验证的功能。开发人员应该注意,对用户输入数据的验证非常重要,它可以提高代码可靠性和安全性。在实际的开发过程中,需要根据具体业务场景和要求,选择合适的验证方式和参数。值得注意的是,filter_var函数虽然方便,但并不能完全替代其他的数据验证方法,开发者应该进行多重验证以确保数据的安全。