承接 phputil/validator 相关项目开发

从需求分析到上线部署,全程专人跟进,保证项目质量与交付效率

邮箱:yvsm@zunyunkeji.com | QQ:316430983 | 微信:yvsm316

phputil/validator

最新稳定版本:2.5.2

Composer 安装命令:

composer require --dev phputil/validator

包简介

Easy and powerful validator for PHP

README 文档

README

Easy and powerful validation library for PHP.

Build Status

We use semantic versioning. See our releases.

Installation

composer require phputil/validator

Dependends only on phputil/rtti.

An Example

A step-by-step example for demonstrating its use.

// Suppose that your application receives an object in a JSON like this:
$json = <<<EXAMPLE
{
	"name": "Bob Developer",
	"likes": 150,
	"phone": { "number": "99988-7766", "notes": "WhatsApp, Telegram" },
	"friends": [ "Suzan", "Mike", "Jane" ]
}
EXAMPLE;
// So you transform the JSON into an object
$obj = json_decode( $json );
// Now you want to validate this object, and you create a Validator
$validator = new Validator();
// And define the rules
$rules = array(
	// name must have from 2 to 60 characters
	'name' => array( Rule::LENGTH_RANGE => array( 2, 60 ), Option::LABEL => 'Name' ),
	// likes must be greater or equal to zero
	'likes' => array( Rule::MIN_VAUE => 0 ),
	// for the phone...
	'phone' => array( Rule::WITH => array(
		// number must follow a regex
		'number' => array(
			Rule::REGEX => '/^[0-9]{5}\\-[0-9]{4}$/',
			Option::LABEL => 'Phone Number'
			)
	) ),
	// have a friend limit
	'friends' => array( Rule::MAX_COUNT => 100 )
);
// And define the messages (we also could load it from a JSON file)
$messages = array(
	'en' => array( // "en" means "english" locale. This is the default locale.
		Rule::LENGTH_RANGE => '{label} must have from {min_length} to {max_length} characters.',
		Rule::MIN_VAUE => '{label} must be greater than or equal to {min_value}.',
		Rule::REGEX => '{label} has an invalid format.',
		Rule::MAX_COUNT => '{label} must have up to {max_count} item(s).',
	)
);
$validator->setMessages( $messages );

// Now we will check the object using our rules
$problems = $validator->checkObject( $obj, $rules );
// In this moment, problems will be an empty array because all values passed.
// That is: $problems === array()

// However, lets make our rules harder, just to understand how the validation works
$rules[ 'name' ][ Rule::LENGTH_RANGE ] = array( 2, 5 ); // Max of 5
$rule[ 'friends' ][ Rule::MAX_COUNT ] = 1; // just one friend (the best one :-)

// And check again
$problems = $validator->checkObject( $obj, $rules );
// Now $problems is an array like this:
// array(
//	'name' => array( 'length_range' => 'Name must have from 2 to 5 characters.' ),
//	'friends' => array( 'max_count' => 'friends must have up to 1 item(s)' )
// )
// Which means that we have two fields with problems. The format is:
//  field => hurt rule => message
// For example, the field "name" hurt the "length_range" rule and its message is
// "Name must have from 2 to 5 characters.".
//
// If we need to know whether "name" has a problem, we just check with isset:
if ( isset( $problems[ 'name' ] ) ) {
	echo 'Name has a problem', PHP_EOL;
}
// If we are only interested in the messages, and don't care about the fields,
// we just use the ProblemsTransformer
$messages = ( new ProblemsTransformer() )->justTheMessages( $problems );
var_dump( $messages );
// Will print something like:
// array( 'Name must have from 2 to 5 characters.', 'friends must have up to 1 item(s)' )
//
// That's it for now. Enjoy it!

Features

  • Validates basic types (see example 1)
  • Validates arrays (see example 2)
  • Validates dynamic objects (stdClass) (see example 3)
  • Validates objects (of user-created classes) with private or protected attributes (see example 3)
  • Supports localized validation messages (different locales)
  • Supports different string formats (UTF, ISO-8859-1, ASCII, etc.)

Available Rules

  • required
  • min_length
  • max_length
  • length_range
  • min_value
  • max_value
  • value_range
  • min_count (for arrays)
  • max_count (for arrays)
  • count_range (for arrays)
  • in (for arrays)
  • not_in (for arrays)
  • start_with (accepts a string or an array of strings, compared with "or")
  • not_start_with (accepts a string or an array of strings, compared with "or")
  • end_with (accepts a string or an array of strings, compared with "or")
  • not_end_with (accepts a string or an array of strings, compared with "or")
  • contains (accepts a string or an array of strings, compared with "or")
  • not_contains (accepts a string or an array of strings, compared with "or")
  • regex
  • format: allows to use a format (see Available Formats)
  • with: allows to define rules for sub-arrays or sub-objects.
  • custom: you can add others easily. See below.

Adding a custom rule

// Adding a custom rule called "myRule" in which the value should be zero:
$validator->setRule( 'myRule', function( $value ) { return 0 == $value; } );

Now checking the custom rule:

$value = rand( 0, 5 ); // Value to be checked, a random between 0 and 5 (inclusive)
$rules = array( 'myRule' => true ); // Rules to be checked. In this example, just "myRule".
$problems = $validator->check( $value, $rules ); // check() will return the hurt rules
echo isset( $problems[ 'myRule' ] ) ? 'myRule as hurt' : 'passed';

Available Formats

  • anything
  • string (same as anything)
  • name
  • word
  • alphanumeric
  • alpha
  • ascii
  • numeric
  • integer
  • double
  • float (same as double)
  • monetary
  • price (same as monetary)
  • tax
  • date (equals to date_dmy)
  • date_dmy
  • date_mdy
  • date_ymd
  • time
  • longtime
  • datetime (equals to datetime_dmy)
  • datetime_dmy
  • datetime_mdy
  • datetime_ymd
  • longdatetime (equals to longdatetime_dmy)
  • longdatetime_dmy
  • longdatetime_mdy
  • longdatetime_ymd
  • email
  • http
  • url
  • ip
  • ipv4
  • ipv6
  • custom: you can add others easily. See below.

You may specify the separator for date-based formats. Default is "/", for example "31/12/1999".

Adding a custom format

// Adding a format "myFormat" in which the value should start with "https://"
$validator->setFormat( 'myFormat', function( $value ) {
	return mb_strpos( $value, 'https://' ) === 0;
	} );

Now checking the format:

$value = 'http://non-https-site.com';
$rules = array( Rule::FORMAT => 'myFormat' ); // rules to be checked
$problems = $validator->check( $value, $rules ); // check() returns the hurt rules
echo isset( $problems[ Rule::FORMAT ] ) ? 'myFormat as hurt' : 'passed';

Message Replacements

  • {min_length} shows the minimum length;
  • {max_length} shows the maximum length;
  • {length_range} shows the minimum and the maximum length (e.g. "5-10");
  • {min_value} shows the minimum value;
  • {max_value} shows the maximum value;
  • {value_range} shows minimum and maximum values (e.g. "5-10");
  • {min_count} shows the minimum count;
  • {max_count} shows the maximum count;
  • {count_range} shows the minimum count and the maximum count (e.g. "5-10");
  • {in} shows the set of items separated by comma;
  • {not_in} shows the set of items separated by comma;
  • {start_with} shows the string or the set of strings separated by comma;
  • {not_start_with} shows the string or the set of strings separated by comma;
  • {end_with} shows the string or the set of strings separated by comma;
  • {not_end_with} shows the string or the set of strings separated by comma;
  • {contains} shows the string or the set of strings separated by comma;
  • {not_contains} shows the string or the set of strings separated by comma;
  • {regex} shows the defined regex;
  • {label} shows the defined label, if defined. Otherwise, shows the array key or object attribute name;
  • {value} shows the value.

Notes:

  • {min_value} and {max_value} are available when the {value_range} is used;
  • {min_length} and {max_length} are available when the {length_range} is used;
  • {min_count} and {max_count} are available when the {count_range} is used.

More

  • Supports UTF-8 and other common formats (ISO-8859-1, Windows-1251, ASCII, etc.)
  • Error messages and formats can be specified by locale.
  • Error messages and formats can be specified at once. This allows you, for example, read them from a JSON file.
  • Formats and rules can be specified without having to extend any class.
  • Classes use a fluent interface (that is, you type less).
  • Builder classes available (soon)

Tests

See here.

Examples

See all

ex1.php - Validating values

ex2.php - Validating arrays

ex3.php - Validating objects

统计信息

  • 总下载量: 463
  • 月度下载量: 0
  • 日度下载量: 0
  • 收藏数: 4
  • 点击次数: 0
  • 依赖项目数: 0
  • 推荐数: 1

GitHub 信息

  • Stars: 4
  • Watchers: 2
  • Forks: 1
  • 开发语言: PHP

其他信息

  • 授权协议: LGPL-3
  • 更新时间: 2015-10-23