検索
ホームページバックエンド開発PHPチュートリアルPHPでのフィルター関数の検証方法を詳しく解説、フィルター検証_PHPチュートリアル

PHPのフィルター関数でデータを検証する方法、フィルター検証の詳細説明

PHPのフィルター関数でデータを検証する方法の紹介、PHPフィルターには2種類あります: 検証は、検証項目が正しいかどうかを検証するために使用されます。合法です
サニタイズは検証対象の項目をフォーマットするために使用されるため、検証項目の値が変更され、不正な文字が削除される可能性があります。

input_filters_list()

現在のシステムでサポートされているすべてのフィルターをリストするために使用されます。

コードをコピーします コードは次のとおりです:
foreach(filter_list() as $id => $filter)
{
echo $filter.' '.filter_id($filter)."n";
}
?>

上記のコードは次の情報を出力します

リーリー

各フィルターには一意の ID があります。ここの各フィルターは filter_var() 関数で使用できます。以下にその使い方を一つずつ紹介していきます。上記のstringとstrippedIDが同じであることに注意してください。これは、これらが同じフィルターであるか、同じフィルターの単なる2つのエイリアスであるためです。

データをフィルタリングする

filter_var() メソッドを使用してデータをフィルタリングします。以下は簡単なフィルタリングの例です。

コードをコピーします コードは次のとおりです: /*** チェックする整数 ***/
$int = 1234;
/*** 整数を検証します ***/
echo filter_var($int, FILTER_VALIDATE_INT);
//1234
?>

上記のコードは、$int 変数が整数型の検証に合格したため、整数型 1234 をデータ化します。今回は、$int 変数の内容を変更します

コードをコピーします コードは次のとおりです: /*** チェックする整数 ***/
$int = 'abc1234';

/*** 整数を検証します ***/
echo filter_var($int, FILTER_VALIDATE_INT);
?>

この時点でコードを実行すると、変数が出力されないことがわかります。これは、$in 変数が検証に合格していないため、このメソッドは bool (false) を返します。同時に、$int=を指定してもbool(false)が返されることに注意してください

整数の検証

上記のコード スニペットは、指定された値が整数であるかどうかを単純に検証します。実際、FILTER_VALIDATE_INT は数値範囲の検証も提供します。変数が整数型であるかどうかを確認し、その値が 50 から 100 の間であるかどうかを検証してみましょう。

リーリー

上記のコードを実行すると、42 が出力されますが、エラーは見つかりません。これはなぜですか?検証に追加の検証ルールを追加する場合は、次のように 'options' キーを含む配列を渡す必要があることがわかります。

コードをコピーします

コードは次のとおりです: /*** チェックする整数 ***/ $int = 42;

/*** int の下限値 ***/
$min = 50;

/*** int の上限 ***/
$max = 100;

/*** 整数を検証します ***/
echo filter_var($int, FILTER_VALIDATE_INT, array("options" =>array("min_range" => $min, "max_range" => $max)));
?>


上記のコードを実行すると、検証が成功したことを示す false が返されるため、ページは何も出力しません。

この方法を使用すると、負の数の範囲検証を実行することもできます

同時に、このメソッドは単一範囲の値もサポートします。つまり、次のような最大値または最小値の範囲を指定するだけです。

コードをコピーします

コードは次のとおりです: /*** チェックする整数 ***/ $int = 12;
/*** int の下限値 ***/
$min = 10;

/*** 整数を検証します ***/
echo filter_var($int, FILTER_VALIDATE_INT,array('options' => array('min_range' => $min)));
//12
?>


上記のコードは、$int が $min より大きい (完全に等しい) 整数型の値であるかどうかを検証し、コードを実行すると 12 が出力されます

変数セットを検証する

上記の例は単一の値を検証しているだけですが、変数のセットが検証された場合はどうなるでしょうか?答えは、filter_var_array() を使用することです。複数の異なる種類のデータを同時に検証できる機能です。簡単な例を次に示します:

复制代码 代码如下:
    /*** an array of values to filter ***/
    $arr = array(10,"109","", "-1234", "some text", "asdf234asdfgs", array());

    /*** create an array of filtered values ***/
    $filtered_array = filter_var_array($arr, FILTER_VALIDATE_INT);

    /*** print out the results ***/
    foreach($filtered_array as $key => $value)
    {
        echo $key.' -- '.$value.'
';
    }
?>

运行上述代码,输出如下:

复制代码 代码如下:
0 -- 10
1 -- 109
2 --
3 -- -1234
4 --
5 --
6 -- Array

八进制和十六进制

FILTER_VALIDATE_INT过滤器同时支持八进制和十六进制,这两种flags是:

FILTER_FLAG_ALLOW_HEX
FILTER_FLAG_ALLOW_OCTAL

利用数组传递flags

复制代码 代码如下:
    /*** a hex value to check ***/
    $hex = "0xff";

    /*** filter with HEX flag ***/
    echo filter_var($hex, FILTER_VALIDATE_INT, array("flags" => FILTER_FLAG_ALLOW_HEX));
    //255
?>

Boolean验证 FILTER_VALIDATE_BOOLEAN

复制代码 代码如下:
    /*** test for a boolean value ***/
    echo filter_var("true", FILTER_VALIDATE_BOOLEAN);
    //1
?>

上面的代码输出1,因为过滤器发现了一个有效的布尔值,下面列出了其它可以返回true的值

复制代码 代码如下:
1
“1”
“yes”
“true”
“on”
TRUE

下列值将会返回false

复制代码 代码如下:
0
“0”
“no”
“false”
“off”
“”
NULL
FALSE

同时也支持下面的用法

复制代码 代码如下:
    /*** a simple array ***/
    $array = array(1,2,3,4,5);

    /*** test for a boolean value ***/
    echo filter_var(in_array(3, $array), FILTER_VALIDATE_BOOLEAN) ? "TRUE" : "FALSE";
    //true
?>

在上面的代码中,先判断了in_array函数执行成功,返回了true,所以最后这段代码输出true

我们也可以传递一个数组,来判断数组中值的boolean类型

复制代码 代码如下:
    /*** a multi dimensional array ***/
    $array = array(0, 1, 2, 3, 4, array(0, 1, 2, 3, 4));

    /*** create the list of values ***/
    $values = filter_var($array, FILTER_VALIDATE_BOOLEAN, FILTER_REQUIRE_ARRAY);

    /*** dump the values ***/
    var_dump($values);
?>

上面代码输出如下:

array(6) {
  [0] => bool(false)
  [1] => bool(true)
  [2] => bool(false)
  [3] => bool(false)
  [4] => bool(false)
  [5] => array(5) {
    [0] => bool(false)
    [1] => bool(true)
    [2] => bool(false)
    [3] => bool(false)
    [4] => bool(false)
  }
}

浮点型验证 FILTER_VALIDATE_FLOAT

<&#63;php
  /*** an FLOAT value to check ***/
  $float = 22.42;

  /*** validate with the FLOAT flag ***/
  if(filter_var($float, FILTER_VALIDATE_FLOAT) === false)
  {
    echo "$float is not valid!";
  }
  else
  {
    echo "$float is a valid floating point number";
  }
&#63;>

对数组进行浮点型验证

同其它验证一样,也可以对一个数组进行浮点型验证。与boolean验证类似,提供一个flgs FILTER_REQUIRE_ARRAY。

<&#63;php
  /*** an array of values ***/
  $array = array(1.2,"1.7","", "-12345.678", "some text", "abcd4.2efgh", array());

  /*** validate the array ***/
  $validation_array = filter_var($array, FILTER_VALIDATE_FLOAT, FILTER_REQUIRE_ARRAY);

  /*** dump the array of validated data ***/
  var_dump($validation_array);
&#63;>

上面的代码输出如下

array(7) {
  [0] => float(1.2)
  [1] => float(1.7)
  [2] => bool(false)
  [3] => float(-23234.123)
  [4] => bool(false)
  [5] => bool(false)
  [6] => array(0) { }
}

浮点型过滤器支持我们指定一个数字间的分隔符

<&#63;php
  /*** an array of floats with seperators ***/
  $floats = array(
    "1,234" => ",",
    "1.234" => "..",
    "1.2e3" => ","
  );

  /*** validate the floats against the user defined decimal seperators ***/
  foreach ($floats as $float => $dec_sep)
  {
    $out = filter_var($float, FILTER_VALIDATE_FLOAT, array("options" => array("decimal" => $dec_sep)));

    /*** dump the results ***/
    var_dump($out);
  }
&#63;>

在上面的代码中,$floats函数中第一个元素值为',',所以在判断1,234值时为其指定了分隔符为',',所以返回true
上面代码完整返回值

复制代码 代码如下:
float(1.234)
Warning: filter_var() [function.filter-var]: decimal separator must be one char in /www/filter.php on line 13
bool(false)
bool(false)

验证URL FILTER_VALIDATE_URL

URL的验证是一项很困难的行为,由于URL的不确定性,它没有最大长度的限制,而且它的格式是多样化的,你可以通过阅读RFC 1738来了解有关URL的一些信息。之后你可以创建一个类来验证所有ipv4和ipv6的URL,以及一些其它URL的验证。你也可以简单的使用FILTER_VALIDATE_URL来验证URL。

<&#63;php
   /*** a rfc compliant web address ***/
  $url = "http://www.phpro.org";

  /*** try to validate the URL ***/
  if(filter_var($url, FILTER_VALIDATE_URL) === FALSE)
  {
    /*** if there is no match ***/
    echo "Sorry, $url is not valid!";
  }
  else
  {
    /*** if we match the pattern ***/
    echo "The URL, $url is valid!<br />";
  }
&#63;>

上面的例子中通过简单的if语句来判断给定的URL是否合法,但并不是所有的URL都是这样的格式。有时候URL可是能是一个IP地址,也可能在URL中传递了多个参数。下面提供了几个flags来帮助我们验证URL:

FILTER_FLAG_SCHEME_REQUIRED – 要求 URL 是 RFC 兼容 URL。(比如:http://cg.am
FILTER_FLAG_HOST_REQUIRED – 要求 URL 包含主机名(比如:
http://levi.cg.com
FILTER_FLAG_PATH_REQUIRED – 要求 URL 在主机名后存在路径(比如:
http://levi.cg.am/test/phpmailer/
FILTER_FLAG_QUERY_REQUIRED – 要求 URL 存在查询字符串(比如:
http://levi.cg.am/?p=2618

<&#63;php
  /*** a non rfc compliant URL ***/
  $url = "index.php";

  /*** try to validate the URL ***/
  if(filter_var($url, FILTER_VALIDATE_URL, FILTER_FLAG_SCHEME_REQUIRED) === FALSE)
  {
    /*** if there is no match ***/
    echo "Sorry, $url is not valid!";
  }
  else
  {
    /*** if the URL is valid ***/
    echo "The URL, $url is valid!";
  }
&#63;>

可以发现,上面的代码没有通过验证

IP过滤器 FILTER_VALIDATE_IP

FILTER_VALIDATE_IP 过滤器把值作为 IP 进行验证。
Name: “validate_ip”
ID-number: 275

可能的标志:

FILTER_FLAG_IPV4 – 要求值是合法的 IPv4 IP(比如:255.255.255.255)
FILTER_FLAG_IPV6 – 要求值是合法的 IPv6 IP(比如:2001:0db8:85a3:08d3:1319:8a2e:0370:7334)
FILTER_FLAG_NO_PRIV_RANGE – 要求值是 RFC 指定的私域 IP (比如 192.168.0.1)
FILTER_FLAG_NO_RES_RANGE – 要求值不在保留的 IP 范围内。该标志接受 IPV4 和 IPV6 值。
Email过滤器FILTER_VALIDATE_EMAIL

FILTER_VALIDATE_EMAIL 过滤器把值作为电子邮件地址来验证。

<&#63;php
  $email = "someone@exa mple.com";

  if(!filter_var($email, FILTER_VALIDATE_EMAIL))
  {
    echo "E-mail is not valid";
  }
  else
  {
    echo "E-mail is valid";
  }
&#63;>

自定义过滤器 FILTER_CALLBACK

FILTER_CALLBACK 过滤器使用用户自定义函数对值进行过滤。

这个过滤器为我们提供了对数据过滤的完全控制。

指定的函数必须存入名为 “options” 的关联数组中。

<&#63;php
  $email = "someone@exa mple.com";

  if(!filter_var($email, FILTER_VALIDATE_EMAIL))
  {
    echo "E-mail is not valid";
  }
  else
  {
    echo "E-mail is valid";
  }
&#63;>

输出

复制代码 代码如下:
Peter_is_a_great_guy!

以上所述就是本文全部内容,希望大家喜欢。

www.bkjia.comtruehttp://www.bkjia.com/PHPjc/1041332.htmlTechArticlePHP中filter函数校验数据的方法详解,filter校验 介绍PHP中filter函数校验数据的方法详解,PHP过滤器包含两种类型: Validation用来验证验证项是...
声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
解决“[Vue warn]: Failed to resolve filter”错误的方法解决“[Vue warn]: Failed to resolve filter”错误的方法Aug 19, 2023 pm 03:33 PM

解决“[Vuewarn]:Failedtoresolvefilter”错误的方法在使用Vue进行开发的过程中,我们有时候会遇到一个错误提示:“[Vuewarn]:Failedtoresolvefilter”。这个错误提示通常出现在我们在模板中使用了一个未定义的过滤器的情况下。本文将介绍如何解决这个错误并给出相应的代码示例。当我们在Vue的

Springboot中filter的原理与注册方法是什么Springboot中filter的原理与注册方法是什么May 11, 2023 pm 08:28 PM

1、filter先看下web服务器的filter所处的位置。filter是一个前后连接的链,前面处理完成之后传递给下一个filter处理。1.1filter的接口定义publicinterfaceFilter{//初始化方法,整个生命周期中只执行一次。//在init方法成功(失败如抛异常等)执行完前,不能提供过滤服务。//参数FilterConfig用于获取初始化参数publicvoidinit(FilterConfigfilterConfig)throwsServletException;//

Filter在java中如何过滤Filter在java中如何过滤Apr 18, 2023 pm 11:04 PM

说明1、如果Lambda参数生成true值,则filter(能够生成boolean结果的Lambda)将生成元素;2、生成false时,就不再使用此元素。实例创建一个List集合:ListstringCollection=newArrayList();stringCollection.add("ddd2");stringCollection.add("aaa2");stringCollection.add("bbb1");stringC

CSS 视觉属性解析:box-shadow,text-shadow 和 filterCSS 视觉属性解析:box-shadow,text-shadow 和 filterOct 20, 2023 pm 12:51 PM

CSS视觉属性解析:box-shadow,text-shadow和filter引言:在网页设计和开发中,使用CSS可以为元素添加各种视觉效果。本文将重点介绍CSS中的box-shadow,text-shadow和filter这三个重要属性,包括其使用方法和效果展示。下面我们分别详细解析这三个属性。一、box-shadow(盒子阴影)box-shado

CSS 模糊属性详解:filter 和 backdrop-filterCSS 模糊属性详解:filter 和 backdrop-filterOct 20, 2023 pm 04:48 PM

CSS模糊属性详解:filter和backdrop-filter导语:在设计网页时,我们常常需要一些特效来增加页面的视觉吸引力。而模糊效果是其中一种常见的特效之一。CSS提供了两种模糊属性:filter和backdrop-filter,它们分别用于对元素内容以及背景内容进行模糊处理。本文将详细介绍这两个属性,并提供一些具体的代码示例。一、filt

怎么在SpringBoot2中整合Filter怎么在SpringBoot2中整合FilterMay 16, 2023 pm 02:46 PM

首先定义一个统一访问URL拦截的Filter。代码如下:publicclassUrlFilterimplementsFilter{privateLoggerlog=LoggerFactory.getLogger(UrlFilter.class);@OverridepublicvoiddoFilter(ServletRequestrequest,ServletResponseresponse,FilterChainchain)throwsIOException,ServletException{H

Java 8中的Optional类:如何使用filter()方法过滤可能为空的值Java 8中的Optional类:如何使用filter()方法过滤可能为空的值Aug 01, 2023 pm 05:27 PM

Java8中的Optional类:如何使用filter()方法过滤可能为空的值在Java8中,Optional类是一个非常有用的工具,它允许我们更好地处理可能为空的值,避免了NullPointerException的发生。Optional类提供了许多方法来操作潜在的空值,其中一个重要的方法是filter()。filter()方法的作用是,如果Option

Vue中如何利用filter对数据进行格式化和处理Vue中如何利用filter对数据进行格式化和处理Oct 15, 2023 pm 03:50 PM

Vue中利用filter对数据进行格式化和处理在Vue中,我们可以通过使用filter来对数据进行格式化和处理。Filter是一种可以在模板中直接调用的函数,它可以对要显示的数据进行处理并返回处理后的结果。在本文中,我们将介绍如何使用filter来格式化和处理数据,并提供具体的代码示例。注册filter在Vue实例中,我们需要先注册一个filter,以便在模

See all articles

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

SAP NetWeaver Server Adapter for Eclipse

SAP NetWeaver Server Adapter for Eclipse

Eclipse を SAP NetWeaver アプリケーション サーバーと統合します。

MinGW - Minimalist GNU for Windows

MinGW - Minimalist GNU for Windows

このプロジェクトは osdn.net/projects/mingw に移行中です。引き続きそこでフォローしていただけます。 MinGW: GNU Compiler Collection (GCC) のネイティブ Windows ポートであり、ネイティブ Windows アプリケーションを構築するための自由に配布可能なインポート ライブラリとヘッダー ファイルであり、C99 機能をサポートする MSVC ランタイムの拡張機能が含まれています。すべての MinGW ソフトウェアは 64 ビット Windows プラットフォームで実行できます。

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

WebStorm Mac版

WebStorm Mac版

便利なJavaScript開発ツール