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

PHPでのフィルター関数の検証方法を詳しく解説、フィルター検証_PHPチュートリアル

Jul 13, 2016 am 09:45 AM
filter

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() を使用することです。複数の異なる種類のデータを同時に検証できる機能です。簡単な例を次に示します:

复制代码 代码如下:
<?php
/*** 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

复制代码 代码如下:
<?php
/*** 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

复制代码 代码如下:
<?php
/*** 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

同时也支持下面的用法

复制代码 代码如下:
<?php
/*** 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类型

复制代码 代码如下:
<?php
/*** 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 までご連絡ください。

ホット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ヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

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

「[Vue 警告]: フィルターを解決できませんでした」エラーを解決する方法 「[Vue 警告]: フィルターを解決できませんでした」エラーを解決する方法 Aug 19, 2023 pm 03:33 PM

「[Vuewarn]:Failedtoresolvefilter」エラーを解決する方法 Vue を使用した開発プロセス中に、「[Vuewarn]:Failedtoresolvefilter」というエラー メッセージが表示されることがあります。このエラー メッセージは通常、テンプレートで未定義のフィルターを使用したときに発生します。この記事では、このエラーを解決する方法を説明し、対応するコード例を示します。 Vue を使用しているとき

Springbootにおけるフィルタの原理と登録方法は何ですか Springbootにおけるフィルタの原理と登録方法は何ですか May 11, 2023 pm 08:28 PM

1. フィルター まず、Web サーバーのフィルターの場所を確認します。フィルタは前後につながったチェーンであり、前の処理が完了すると次のフィルタに渡されて処理が行われます。 1.1フィルター インターフェイス定義 publicinterfaceFilter{//初期化メソッド。ライフサイクル全体で 1 回だけ実行されます。 //initメソッドが正常に実行されるまで(例外スローなどの失敗)、フィルタリングサービスは提供できません。 // パラメータ FilterConfig は、初期化パラメータを取得するために使用されます publicvoidinit(FilterConfigfilterConfig)throwsServletException;//

SpringBoot2にフィルターを統合する方法 SpringBoot2にフィルターを統合する方法 May 16, 2023 pm 02:46 PM

まず、統合アクセス URL インターセプト用のフィルターを定義します。コードは次のとおりです: publicclassUrlFilterimplementsFilter{privateLoggerlog=LoggerFactory.getLogger(UrlFilter.class);@OverridepublicvoiddoFilter(ServletRequestrequest,ServletResponseresponse,FilterChainchain)throwsIOException,ServletException{H

Javaでフィルタリングする方法 Javaでフィルタリングする方法 Apr 18, 2023 pm 11:04 PM

注 1. Lambda パラメータが true 値を生成する場合、フィルター (ブール値の結果を生成できる Lambda) は要素を生成します; 2. false が生成されると、この要素は使用されなくなります。リスト コレクションを作成する例: ListstringCollection=newArrayList();stringCollection.add("ddd2");stringCollection.add("aaa2");stringCollection.add("bbb1");stringC

CSS 視覚プロパティ分析: ボックスシャドウ、テキストシャドウ、フィルター CSS 視覚プロパティ分析: ボックスシャドウ、テキストシャドウ、フィルター Oct 20, 2023 pm 12:51 PM

CSS 視覚プロパティの分析: box-shadow、text-shadow、filter はじめに: Web デザインおよび開発では、CSS を使用して要素にさまざまな視覚効果を追加できます。この記事では、CSS の box-shadow、text-shadow、filter の 3 つの重要なプロパティに焦点を当て、その使用法や効果の表示も含めて説明します。以下では、これら 3 つのプロパティを詳細に分析します。 1.box-shadow (ボックスシャドウ) box-shado

CSS のぼかしプロパティの詳細な説明: filter および backdrop-filter CSS のぼかしプロパティの詳細な説明: filter および backdrop-filter Oct 20, 2023 pm 04:48 PM

CSS ファジー プロパティの詳細な説明: filter および background-filter はじめに: Web ページをデザインするとき、ページの視覚的な魅力を高めるためにいくつかの特殊効果が必要になることがよくあります。ブラー効果は一般的な特殊効果の 1 つです。 CSS には、filter と background-filter という 2 つのぼかし属性が用意されており、それぞれ要素のコンテンツと背景のコンテンツをぼかすために使用されます。この記事では、これら 2 つのプロパティについて詳しく説明し、具体的なコード例をいくつか示します。 1.フィルター

Java 8 のオプション クラス: filter() メソッドを使用して null の可能性のある値をフィルタリングする方法 Java 8 のオプション クラス: filter() メソッドを使用して null の可能性のある値をフィルタリングする方法 Aug 01, 2023 pm 05:27 PM

Java8 のオプション クラス: filter() メソッドを使用して null の可能性のある値をフィルタリングする方法 Java8 では、Optional クラスは、null の可能性のある値をより適切に処理し、NullPointerException の発生を回避できる非常に便利なツールです。 Optional クラスには、潜在的な null 値を操作するためのメソッドが多数用意されています。重要なメソッドの 1 つは filter() です。 filter() メソッドの機能は、オプションが

Vue でフィルターを使用してデータをフォーマットおよび処理する方法 Vue でフィルターを使用してデータをフォーマットおよび処理する方法 Oct 15, 2023 pm 03:50 PM

Vue でフィルターを使用してデータをフォーマットおよび処理する Vue では、フィルターを使用してデータをフォーマットおよび処理できます。 Filter はテンプレート内で直接呼び出すことができる関数で、表示するデータを処理し、処理結果を返すことができます。この記事では、フィルターを使用してデータをフォーマットおよび処理する方法を紹介し、具体的なコード例を示します。フィルターの登録 Vue インスタンスでは、モデルで使用できるように最初にフィルターを登録する必要があります。

See all articles