← Back to PHP Course | Chapter 10: Forms & Validation | Lesson 8 of 8

PHP Filters Advanced

filter_var() से basic filtering एक email या integer validate करने जैसे common cases cover करती है, लेकिन PHP के filter functions आगे जाते हैं -- एक साथ पूरे arrays filter करना, PHP में built in न होने वाले rules के लिए custom callback filters apply करना, और valid क्या count हो इस पर finer control के लिए कई filter flags combine करना।
Syntax
php
$result = filter_var_array($data, ["key" => FILTER_VALIDATE_EMAIL, "key2" => FILTER_VALIDATE_INT]);

$result = filter_var($value, FILTER_CALLBACK, ["options" => "function_name"]);
$result = filter_var($value, FILTER_VALIDATE_INT, FILTER_FLAG_ALLOW_THOUSAND);

filter_var_array() से पूरा Array Filter करना

filter_var_array($data, $rules) एक call में किसी array की हर key पर एक अलग filter apply करता है, एक $rules array follow करते हुए जो हर key name को उसे इस्तेमाल करने वाले filter में map करता है -- हर single form field के लिए अलग से filter_var() call करने से कहीं ज़्यादा convenient।

उदाहरण: Filtering an Entire Array with filter_var_array()

php
<?php
// Declare `$data` as an array: `["email" => "[email protected]", "age" => "25"]`
$data = ["email" => "[email protected]", "age" => "25"];
// Declare `$rules` as an array: `["email" => FILTER_VALIDATE_EMAIL, "age" => FILTER_VALIDATE_INT]`
$rules = ["email" => FILTER_VALIDATE_EMAIL, "age" => FILTER_VALIDATE_INT];
// Print a human-readable dump of `filter_var_array($data, $rules)`
print_r(filter_var_array($data, $rules));
?>

FILTER_CALLBACK से एक Custom Filter लिखना

FILTER_CALLBACK आपको validation rule की तरह अपना खुद का function supply करने देता है, उन checks के लिए जिन्हें PHP के built-in filters directly support नहीं करते -- जैसे यह confirm करना कि एक username में सिर्फ letters, numbers, और underscores हैं, या एक value किसी business-specific rule से match करती है।

उदाहरण: Writing a Custom Filter with FILTER_CALLBACK

php
<?php
// Declare `$username`, set to "alice_99"
$username = "alice_99";
$options = ["options" => function ($value) {
    // Return `preg_match('/^\w+$/', $value) ? $value : false` from this function
    return preg_match('/^\w+$/', $value) ? $value : false;
}];
// Print a detailed dump (with types) of `filter_var($username, FILTER_CALLBACK, $options)`
var_dump(filter_var($username, FILTER_CALLBACK, $options));
?>

Flags के साथ Filters Fine-Tune करना

कई filters अपने exact behavior adjust करने के लिए additional flags accept करते हैं -- FILTER_FLAG_ALLOW_THOUSAND FILTER_VALIDATE_INT को thousands separators accept करने देता है, और FILTER_NULL_ON_FAILURE एक boolean filter को specifically unrecognized input के लिए null (false के बजाय) return करने के लिए बदल देता है, इसे एक genuine "false" value से अलग करते हुए।

उदाहरण: Fine-Tuning Filters with Flags

php
<?php
// Print a detailed dump (with types) of `filter_var("1,000", FILTER_VALIDATE_INT, FILTER_FLAG_ALLOW_THOUSAND)`
var_dump(filter_var("1,000", FILTER_VALIDATE_INT, FILTER_FLAG_ALLOW_THOUSAND));
// Print a detailed dump (with types) of `filter_var("maybe", FILTER_VALIDATE_BOOLEAN, FILTER_NULL_ON_FAILURE)`
var_dump(filter_var("maybe", FILTER_VALIDATE_BOOLEAN, FILTER_NULL_ON_FAILURE));
?>

एक साथ कई Fields Sanitize करना

filter_var_array() sanitization filters के लिए भी काम करता है, सिर्फ validation वालों के लिए नहीं -- एक ही call में submitted fields के पूरे array पर FILTER_SANITIZE_STRING-style cleanup या FILTER_SANITIZE_NUMBER_INT apply करते हुए, एक साथ कई inputs साफ करते हुए।

उदाहरण: Sanitizing Multiple Fields at Once

php
<?php
// Declare `$data` as an array: `["age" => "25abc", "phone" => "555-1234"]`
$data = ["age" => "25abc", "phone" => "555-1234"];
// Declare `$rules` as an array: `["age" => FILTER_SANITIZE_NUMBER_INT, "phone" => FILTER_SANITIZE_NUMBER_INT]`
$rules = ["age" => FILTER_SANITIZE_NUMBER_INT, "phone" => FILTER_SANITIZE_NUMBER_INT];
// Print a human-readable dump of `filter_var_array($data, $rules)`
print_r(filter_var_array($data, $rules));
?>

सीधे Superglobal Input Filter करना

filter_input(INPUT_GET, "key", $filter) या filter_input(INPUT_POST, "key", $filter) $_GET या $_POST superglobals से सीधे एक value एक step में पढ़ता और filter करता है, बिना raw superglobal array को बिल्कुल छुए -- पढ़ने और फिर अलग से filter करने से थोड़ा safer, ज़्यादा explicit pattern।

उदाहरण: Filtering Superglobal Input Directly

php
<?php
// Set `$_GET['id']` to "42"
$_GET['id'] = "42";
// Declare `$id`, set to `filter_input(INPUT_GET, "id", FILTER_VALIDATE_INT)`
$id = filter_input(INPUT_GET, "id", FILTER_VALIDATE_INT);
// Print a detailed dump (with types) of `$id`
var_dump($id);
?>
Related Topics
{# common_mistakes/chapter_summary/browser_support: on Hindi pages the view already swaps in the hi_ translation fields (or blanks these out if untranslated), so this renders correctly for both languages without a lang_code check here. #}
आम गलतियां
  1. यह भूल जाना कि filter_var() ज़्यादातर filters के लिए failure पर false return करता है, जो खुद एक valid boolean value है -- हमेशा एक loose truthy check के बजाय === false से compare करें।
  2. यह realize न करना कि FILTER_VALIDATE_INT और similar filters default रूप से leading/trailing whitespace वाली values reject करते हैं जब तक उपयुक्त flag add न किया जाए।
  3. एक custom FILTER_CALLBACK function लिखना जो खुद invalid input पर false return नहीं करता, दूसरे filters के follow किए consistent success/failure contract को तोड़ते हुए।
चैप्टर सारांश
  • filter_var_array() एक साथ किसी array की हर value पर filters apply करता है, keys को filter definitions में map करने वाला एक rules array follow करते हुए।
  • FILTER_CALLBACK आपको PHP के built-in filters cover न करने वाले rules के लिए अपना खुद का custom validation function supply करने देता है।
  • FILTER_FLAG_ALLOW_THOUSAND या FILTER_NULL_ON_FAILURE जैसे filter flags fine-tune करते हैं कि एक filter exactly कैसे behave करता है।
🔒

Chapter Quiz — Complete all 8 topics to unlock

0/8 topics done

Complete these topics first:

Login to run this code

C/C++/Java/PHP execution requires a free account. Your code is saved — you'll land right back in the editor after logging in.