ubcent/gump

一个快速、可扩展且独立的PHP输入验证类,允许您验证任何数据

维护者

详细信息

github.com/ubcent/GUMP

源代码

v1.1.1 2015-02-27 06:44 UTC

This package is not auto-updated.

Last update: 2024-09-28 15:23:49 UTC


README

GUMP是一个独立的PHP数据验证和过滤类,它使验证任何数据变得简单且不痛苦,无需依赖框架。

安装GUMP有2种方法

手动安装
  1. 下载GUMP
  2. 解压缩并将其目录复制到您的PHP项目目录中。

在项目中包含它

require "gump.class.php";

$is_valid = GUMP::is_valid($_POST, array(
	'username' => 'required|alpha_numeric',
	'password' => 'required|max_len,100|min_len,6'
));

if($is_valid === true) {
	// continue
} else {
	print_r($is_valid);
}
使用composer安装

将以下内容添加到您的composer.json文件中

{
    "require": {
        "ubcent/gump": "dev-master"
    }
}

然后在您的项目目录中打开终端并运行

composer install

可用方法

// Shorthand validation
is_valid(array $data, array $rules, array $custom_messages) 

// Get or set the validation rules
validation_rules(array $rules); 

// Get or set the filtering rules
filter_rules(array $rules); 

// Runs the filter and validation routines
run(array $data); 

// Strips and encodes unwanted characters
xss_clean(array $data); 

// Sanitizes data and converts strings to UTF-8 (if available), 
// optionally according to the provided field whitelist
sanitize(array $input, $whitelist = NULL); 

// Validates input data according to the provided ruleset (see example)
validate(array $input, array $ruleset); 

// Filters input data according to the provided filterset (see example)
filter(array $input, array $filterset); 

// Returns human readable error text in an array or string
get_readable_errors($convert_to_string = false, array $custom_error_messages); 

// Fetch an array of validation errors indexed by the field names
get_errors_array();

// Override field names with readable ones for errors
set_field_name($field, $readable_name);

示例(长格式)

以下示例是注册表单的一部分,流程应该是相当标准的

# Note that filters and validators are separate rule sets and method calls. There is a good reason for this.

require "gump.class.php";

$gump = new GUMP();

$_POST = $gump->sanitize($_POST); // You don't have to sanitize, but it's safest to do so.

$gump->validation_rules(array(
	'username'    => 'required|alpha_numeric|max_len,100|min_len,6',
	'password'    => 'required|max_len,100|min_len,6',
	'email'       => 'required|valid_email',
	'gender'      => 'required|exact_len,1|contains,m f',
	'credit_card' => 'required|valid_cc'
));

$gump->filter_rules(array(
	'username' => 'trim|sanitize_string',
	'password' => 'trim',
	'email'    => 'trim|sanitize_email',
	'gender'   => 'trim',
	'bio'	   => 'noise_words'
));

$validated_data = $gump->run($_POST);

if($validated_data === false) {
	echo $gump->get_readable_errors(true);
} else {
	print_r($validated_data); // validation successful
}

示例(短格式)

短格式是运行验证的另一种方式。

$data = array(
	'street' => '6 Avondans Road'
);

$validated = GUMP::is_valid($data, array(
	'street' => 'required|street_address'
), array(
	'validate_required'	=>	'The "#field" field is required',
	'validate_street_address'	=> 'The "#field" field needs to be a valid street address',
));

if($validated === true) {
	echo "Valid Street Address!";
} else {
	print_r($validated);
}

将数据键与规则键匹配

通过向run方法添加一个额外的参数,我们可以检查是否为每个数据键指定了规则。

$gump->run($_POST, true);

如果不匹配,输出将是

There is no validation rule for <span class=\"$field_class\">$field</span>

返回值

run()返回以下两种类型之一

数组包含成功验证和过滤的数据,当验证成功时

布尔值当验证失败时为False

validate()返回以下两种类型之一

数组包含键名和验证器名,当数据未通过验证时。

您可以使用此数组以及您的语言助手来确定要显示的错误消息。

布尔值值为TRUE表示验证成功。

filter()返回与作为$input参数解析的确切数组结构相同的数组,唯一的区别是过滤后的数据。

可用验证器

  • required 确保指定的键值存在且不为空
  • valid_email 检查是否为有效的电子邮件地址
  • max_len,n 检查键值长度,确保它不大于指定的长度。n = 长度参数。
  • min_len,n 检查键值长度,确保它不短于指定的长度。n = 长度参数。
  • exact_len,n 确保键值长度恰好与指定的长度匹配。n = 长度参数。
  • alpha 确保键值中只包含字母字符(a-z,A-Z)
  • alpha_numeric 确保键值中只包含字母数字字符(a-z,A-Z,0-9)
  • alpha_dash 确保键值中只包含字母数字字符、破折号和下划线(a-z,A-Z,0-9,_-)
  • alpha_space 确保键值中只包含字母数字字符和空格(a-z,A-Z,0-9,\s)
  • numeric 确保只包含数字键值
  • integer 确保只包含整数键值
  • boolean 检查PHP接受的布尔值,对于"1"、"true"、"on"和"yes"返回TRUE
  • float 检查浮点值
  • valid_url 检查是否为有效的URL或子域
  • url_exists 检查URL是否存在并可访问
  • valid_ip 检查是否为有效的通用IP地址
  • valid_ipv4 检查是否为有效的IPv4地址
  • valid_ipv6 检查是否为有效的IPv6地址
  • valid_cc 检查是否为有效的信用卡号码(使用MOD10校验和算法)
  • valid_name 检查是否为有效的人类姓名格式
  • contains,n 验证值是否包含在预定义的值集中
  • containsList,n 验证一个值是否包含在预定义值集中。逗号分隔,列表不输出。
  • doesNotcontainList,n 验证一个值是否不包含在预定义值集中。逗号分隔,列表不输出。
  • street_address 检查提供的字符串是否为可能的街道地址。1个数字,1个或多个空格,1个或多个字母
  • iban 检查有效的IBAN
  • min_numeric 确定提供的数值是否高于或等于特定值
  • max_numeric 确定提供的数值是否低于或等于特定值
  • date 确定提供的输入是否为有效的日期(ISO 8601)
  • starts 确保值以特定字符/字符集开头

可用过滤器

过滤器可以是任何返回字符串的PHP函数。如果存在可以执行您希望过滤器执行操作的PHP函数,您不需要创建自己的。

  • sanitize_string 删除脚本标签并编码HTML实体,类似于GUMP::xss_clean();
  • urlencode 编码URL实体
  • htmlencode 编码HTML实体
  • sanitize_email 从电子邮件地址中删除非法字符
  • sanitize_numbers 删除任何非数字字符
  • trim 从字符串的开始或结束处删除空格
  • base64_encode 对输入进行Base64编码
  • base64_decode 对输入进行Base64解码
  • sha1 使用安全的sha1算法加密输入
  • md5 MD5编码输入
  • noise_words 从字符串中删除噪声词
  • json_encode 创建输入的json表示形式
  • json_decode 解码json字符串
  • rmpunctuation 从字符串中删除所有已知标点符号字符
  • basic_tags 从文本中删除所有布局导向的HTML标签。只留下基本标签
  • whole_number 确保提供的数值以整数形式表示

创建自己的验证器和过滤器

通过使用回调函数,可以轻松地添加自定义验证器和过滤器。

require("gump.class.php");

/* 
   Create a custom validation rule named "is_object".   
   The callback receives 3 arguments:
   The field to validate, the values being validated, and any parameters used in the validation rule.
   It should return a boolean value indicating whether the value is valid.
*/
GUMP::add_validator("is_object", function($field, $input, $param = NULL) {
    return is_object($input[$field]);
});

/* 
   Create a custom filter named "upper".
   The callback function receives two arguments:
   The value to filter, and any parameters used in the filter rule. It should returned the filtered value.
*/
GUMP::add_filter("upper", function($value, $params = NULL) {
    return strtoupper($value);
});

或者,您可以简单地创建一个扩展GUMP类的自己的类。

require("gump.class.php");

class MyClass extends GUMP
{
	public function filter_myfilter($value, $param = NULL)
	{
		...
	}

	public function validate_myvalidator($field, $input, $param = NULL)
	{
		...
	}

} // EOC

$validator = new MyClass();

$validated = $validator->validate($_POST, $rules);

有关更多信息,请参阅examples/custom_validator.php

请记住创建具有正确参数类型和参数数量的公共方法。

  • 对于过滤器方法,在方法名称前添加"filter_"。
  • 对于验证器方法,在方法名称前添加"validate_"。

设置自定义字段名称

您可以通过使用以下方法GUMP::set_field_name($field, $readable_name)轻松覆盖表单字段名称,以在错误中提高可读性

$data = array(
	'str' => null
);

$rules = array(
	'str' => 'required'
);

GUMP::set_field_name("str", "Street");

$validated = GUMP::is_valid($data, $rules);

if($validated === true) {
	echo "Valid Street Address\n";
} else {
	print_r($validated);
}