Inhaltsverzeichnis
PHP中filter函数校验数据的方法详解,filter校验
Heim Backend-Entwicklung PHP-Tutorial PHP中filter函数校验数据的方法详解,filter校验_PHP教程

PHP中filter函数校验数据的方法详解,filter校验_PHP教程

Jul 13, 2016 am 09:45 AM
filter

PHP中filter函数校验数据的方法详解,filter校验

介绍PHP中filter函数校验数据的方法详解,PHP过滤器包含两种类型:Validation用来验证验证项是否合法
Sanitization用来格式化被验证的项目,因此它可能会修改验证项的值,将不合法的字符删除。

input_filters_list()

用来列出当前系统所支持的所有过滤器。

复制代码 代码如下:
foreach(filter_list() as $id => $filter)
{
    echo $filter.' '.filter_id($filter)."\n";
}
?>

以上代码会输出如下信息

Filter Name Filter ID
int 257
boolean 258
float 259
validate_regexp 272
validate_url 273
validate_email 274
validate_ip 275
string 513
stripped 513
encoded 514
special_chars 515
full_special_chars 522
unsafe_raw 516
email 517
url 518
number_int 519
number_float 520
magic_quotes 521
callback 1024
Nach dem Login kopieren

每个过滤器都会拥有一个独自的ID。这里的每个过滤器都能够被filter_var()函数使用。下面将会逐个介绍其使用方法。注意 ,上面的string和strippedID相同,这是因为他们是同一个过滤器,或者说是同一个过滤器的两个别名罢了。

过滤数据

使用filter_var()方法对数据进行过滤,下面是一个简单的过滤例子

复制代码 代码如下:
<?php
/*** an integer to check ***/
$int = 1234;
/*** validate the integer ***/
echo filter_var($int, FILTER_VALIDATE_INT);
//1234
?>

上面代码将会数据一个整数型的1234,因为$int变量通过的整数类型的验证,这次更换一下$int变量的内容

复制代码 代码如下:
<?php
/*** an integer to check ***/
$int = 'abc1234';

/*** validate the integer ***/
echo filter_var($int, FILTER_VALIDATE_INT);
?>

此时在运行代码,发现没有任何变量输出,这是因为$in变量没有通过验证,因此这个方法返回bool(false)。同时也需要注意 一下,即使$int=”,也会返回bool(false)

整数验证

上面的几段代码简单的验证了一个给定值是否为整数的例子。其实FILTER_VALIDATE_INT也提供了数值范围的验证,下面我们 来验证一个变量,判断它是否为整数型,并验证它的值是否在50到100之间

<&#63;php
  /*** an integer to check ***/
  $int = 42;

  /*** lower limit of the int ***/
  $min = 50;

  /*** upper limit of the int ***/
  $max = 100;

  /*** validate the integer ***/
  echo filter_var($int, FILTER_VALIDATE_INT, array("min_range" => $min, "max_range" => $max));
  //42
&#63;>

Nach dem Login kopieren

运行上面的代码,发现42被输出来了,并没有发现任何错误,这是为什么啊?原来想要向验证中添加附加验证规则时候,需要传递一个含有'options‘键的数组,向下面这样:

复制代码 代码如下:
<?php
/*** an integer to check ***/
$int = 42;

/*** lower limit of the int ***/
$min = 50;

/*** upper limit of the int ***/
$max = 100;

/*** validate the integer ***/
echo filter_var($int, FILTER_VALIDATE_INT, array("options" => array("min_range" => $min, "max_range" => $max)));
?>

运行上面的代码,页面不会有任何输出,因为上面返回了false,说明验证成功。

使用该方法也可以对负数进行范围验证
同时这种方式也支持单范围取值,即只是指定一个最大值或者最小值的范围,如:
复制代码 代码如下:
<?php
/*** an integer to check ***/
$int = 12;

/*** lower limit of the int ***/
$min = 10;

/*** validate the integer ***/
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)
  }
}
Nach dem Login kopieren

浮点型验证 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;>

Nach dem Login kopieren

对数组进行浮点型验证

同其它验证一样,也可以对一个数组进行浮点型验证。与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;>

Nach dem Login kopieren

上面的代码输出如下

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) { }
}
Nach dem Login kopieren

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

<&#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;>

Nach dem Login kopieren

在上面的代码中,$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;>

Nach dem Login kopieren

上面的例子中通过简单的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;>

Nach dem Login kopieren

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

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;>

Nach dem Login kopieren
Nach dem Login kopieren

自定义过滤器 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;>

Nach dem Login kopieren
Nach dem Login kopieren

输出

复制代码 代码如下:
Peter_is_a_great_guy!

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

www.bkjia.comtruehttp://www.bkjia.com/PHPjc/1041332.htmlTechArticlePHP中filter函数校验数据的方法详解,filter校验 介绍PHP中filter函数校验数据的方法详解,PHP过滤器包含两种类型: Validation用来验证验证项是...
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

AI Hentai Generator

AI Hentai Generator

Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

R.E.P.O. Energiekristalle erklärten und was sie tun (gelber Kristall)
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Beste grafische Einstellungen
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. So reparieren Sie Audio, wenn Sie niemanden hören können
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Wie man alles in Myrise freischaltet
4 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

So beheben Sie den Fehler „[Vue-Warnung]: Fehler beim Auflösen des Filters'. So beheben Sie den Fehler „[Vue-Warnung]: Fehler beim Auflösen des Filters'. Aug 19, 2023 pm 03:33 PM

Methoden zur Behebung des Fehlers „[Vuewarn]:Failedtoresolvefilter“ Während des Entwicklungsprozesses mit Vue stoßen wir manchmal auf eine Fehlermeldung: „[Vuewarn]:Failedtoresolvefilter“. Diese Fehlermeldung tritt normalerweise auf, wenn wir in der Vorlage einen undefinierten Filter verwenden. In diesem Artikel wird erläutert, wie dieser Fehler behoben werden kann, und es werden entsprechende Codebeispiele aufgeführt. Wenn wir in Vue sind

Was ist das Prinzip und die Registrierungsmethode des Filters in Springboot? Was ist das Prinzip und die Registrierungsmethode des Filters in Springboot? May 11, 2023 pm 08:28 PM

1. Filter Sehen Sie sich zunächst den Standort des Filters auf dem Webserver an. Filter ist eine Kette, die vorher und nachher verbunden ist. Nachdem die vorherige Verarbeitung abgeschlossen ist, wird sie zur Verarbeitung an den nächsten Filter übergeben. 1.1Filterschnittstellendefinition publicinterfaceFilter{//Initialisierungsmethode, die im gesamten Lebenszyklus nur einmal ausgeführt wird. //Filterdienste können erst bereitgestellt werden, wenn die Init-Methode erfolgreich ausgeführt wurde (Fehler wie das Auslösen einer Ausnahme usw.). //Der Parameter FilterConfig wird verwendet, um den Initialisierungsparameter abzurufen publicvoidinit(FilterConfigfilterConfig)throwsServletException;//

So integrieren Sie Filter in SpringBoot2 So integrieren Sie Filter in SpringBoot2 May 16, 2023 pm 02:46 PM

Definieren Sie zunächst einen Filter für das Abfangen von Unified Access-URLs. Der Code lautet wie folgt: publicclassUrlFilterimplementsFilter{privateLoggerlog=LoggerFactory.getLogger(UrlFilter.class);@OverridepublicvoiddoFilter(ServletRequestrequest,ServletResponseresponse,FilterChainchain)throwsIOException,ServletException{H

Analyse visueller CSS-Eigenschaften: Box-Shadow, Text-Shadow und Filter Analyse visueller CSS-Eigenschaften: Box-Shadow, Text-Shadow und Filter Oct 20, 2023 pm 12:51 PM

Analyse der visuellen CSS-Eigenschaften: Box-Shadow, Text-Shadow und Filter Einführung: Im Webdesign und in der Webentwicklung kann CSS verwendet werden, um Elementen verschiedene visuelle Effekte hinzuzufügen. Dieser Artikel konzentriert sich auf die drei wichtigen Eigenschaften von Box-Shadow, Text-Shadow und Filter in CSS, einschließlich ihrer Verwendung und Effektanzeige. Im Folgenden analysieren wir diese drei Eigenschaften im Detail. 1. Box-Shado (Box-Shado) Box-Shado

So filtern Sie in Java So filtern Sie in Java Apr 18, 2023 pm 11:04 PM

Hinweis 1. Wenn der Lambda-Parameter einen wahren Wert generiert, generiert der Filter (Lambda, der ein boolesches Ergebnis generieren kann) ein Element 2. Wenn ein falscher Wert generiert wird, wird dieses Element nicht mehr verwendet. Beispiel zum Erstellen einer Listensammlung: ListstringCollection=newArrayList();stringCollection.add("ddd2");stringCollection.add("aaa2");stringCollection.add("bbb1");stringC

Detaillierte Erläuterung der CSS-Unschärfeeigenschaften: Filter und Hintergrundfilter Detaillierte Erläuterung der CSS-Unschärfeeigenschaften: Filter und Hintergrundfilter Oct 20, 2023 pm 04:48 PM

Detaillierte Erläuterung der CSS-Fuzzy-Eigenschaften: Filter und Hintergrundfilter Einführung: Beim Entwerfen von Webseiten benötigen wir häufig einige Spezialeffekte, um die visuelle Attraktivität der Seite zu erhöhen. Der Unschärfeeffekt ist einer der häufigsten Spezialeffekte. CSS bietet zwei Unschärfeattribute: Filter und Hintergrundfilter, die zum Unschärfen von Elementinhalten bzw. Hintergrundinhalten verwendet werden. In diesem Artikel werden diese beiden Eigenschaften ausführlich erläutert und einige konkrete Codebeispiele bereitgestellt. 1. Filter

Optionale Klasse in Java 8: So filtern Sie mögliche Nullwerte mit der Methode filter() Optionale Klasse in Java 8: So filtern Sie mögliche Nullwerte mit der Methode filter() Aug 01, 2023 pm 05:27 PM

Optionale Klasse in Java8: So verwenden Sie die filter()-Methode, um möglicherweise Nullwerte zu filtern. In Java8 ist die optionale Klasse ein sehr nützliches Werkzeug, das es uns ermöglicht, möglicherweise Nullwerte besser zu verarbeiten und das Auftreten von NullPointerException zu vermeiden. Die optionale Klasse bietet viele Methoden zum Bearbeiten potenzieller Nullwerte. Eine der wichtigen Methoden ist filter(). Die Funktion der filter()-Methode ist die if-Option

So verwenden Sie Filter zum Formatieren und Verarbeiten von Daten in Vue So verwenden Sie Filter zum Formatieren und Verarbeiten von Daten in Vue Oct 15, 2023 pm 03:50 PM

Verwenden Sie Filter, um Daten in Vue zu formatieren und zu verarbeiten. In Vue können wir Daten mithilfe von Filtern formatieren und verarbeiten. Filter ist eine Funktion, die direkt in der Vorlage aufgerufen werden kann. Sie kann die anzuzeigenden Daten verarbeiten und die verarbeiteten Ergebnisse zurückgeben. In diesem Artikel stellen wir die Verwendung von Filtern zum Formatieren und Verarbeiten von Daten vor und stellen spezifische Codebeispiele bereit. Filter registrieren In der Vue-Instanz müssen wir zuerst einen Filter registrieren, damit er im Modell verwendet werden kann

See all articles