molajo / fieldhandler
Molajo Fieldhandler:验证和过滤输入;转义和格式化输出
Requires
- php: >=5.4
- commonapi/exception: dev-master
- commonapi/model: dev-master
This package is auto-updated.
Last update: 2024-09-08 04:08:36 UTC
README
======= Molajo Fieldhandler [Alpha]
Molajo Fieldhandler 是一个用于PHP应用的集成数据完整性保证包。它将验证和清理功能特别作为专用工具。通过在字段级别规则遵守的焦点周围统一工具使用,应用程序确保数据收集过程提供干净、验证和有用的信息。
关键任务应用依赖于精心设计和精心实施的去污、格式化和验证例程。Molajo Fieldhandler 的目标是让PHP开发者不仅能够实现这一目标,而且更重要的是能够用客户能够理解的语言精确地传达应用程序强制执行完整性约束的方式。
方法论概述
在最基本层面上,约束 通过描述数据的属性来定义数据收集和使用规则。这些规则可能包括关于最小和最大值、数组发生次数的规格,或者是否某个字段是必需的,以及可以用来确认数据值的列表或数据范围。
在应用开发中的一个关键步骤是将特定的完整性约束与收集中的每个字段相关联。如果不能明确表达定义该状态的规则,则根本无法确保数据清洁。
定义完整性约束
例如,假设对 password
字段的以下约束
- 密码可以包含字母数字字符、下划线 (_)、美元符号 ($) 和井号 (#)。
- 密码长度必须为8到30个字符。
- 密码每90天过期。
- 新密码不能与现有值匹配。
- 密码永远不会显示,必须用星号屏蔽。
设计执行策略
审查现有的 Molajo Fieldhandler 约束类以定义执行。当提供的约束不够时,可以创建自定义约束。
- 使用 Date Constraint 验证密码的 '最后更改日期',以验证日期不是90天前。
- 使用 Alphanumeric Constraint 和值 (_), ($), (#) 验证字段数据。
- 使用 Length Constraint 验证字段数据,以确保长度为8到30个字符。
- 使用 Password Constraint 类转义密码,将密码值替换为星号。
编写代码以部署执行策略
示例:详细说明
这是一个详细示例,用于学习每个约束如何具体执行。
// 1. Instantiate the Molajo Fieldhandler and inject $fieldhandler into class $fieldhandler = new Molajo\Fieldhandler\Request(); // 2. Verify the password is still valid $results = $request->validate('Last Changed', $last_changed, 'Date', array('LT' => 91, 'Context' => 'Days'); if ($results->getValidateResponse() === false) { // deal with the problem $messages = $results->getValidateMessages(); } // 3. Verify data values using the *Alphanumeric Constraint* and values (_), ($), and (#). $results = $request->validate('Password', $password, 'Alphanumeric', array('special_characters' => '-, $, #'); if ($results->getValidateResponse() === false) { // deal with the problem $messages = $results->getValidateMessages(); } // 4. Passwords must be from 8 to 30 characters in length. $results = $request->validate('Password', $password, 'Length', array('minimum' => 8, 'maximum' => 30); if ($results->getValidateResponse() === false) { // deal with the problem $messages = $results->getValidateMessages(); } // 5. Display Password $results = $request->escaoe('Password', $display_password, 'Password'; if ($results->getChangeIndicator() === true) { $display_password = $results->getFieldValue(); }
示例:字段收集
虽然前面的示例展示了如何一次执行每个测试,但也可能为每个字段分组约束
// 1. Instantiate the Molajo Fieldhandler and inject $fieldhandler into class $fieldhandler = new Molajo\Fieldhandler\Request(); // 2. Enforce Password Constraints using a terse syntax $results = $request->ensureFieldConstraints( 'Display Password', $display_password, array('verify' => 'date', 'verify' => 'Alphanumeric', 'verify' => 'Length', 'escape' => 'Password'), array('LT' => 91, 'Context' => 'Days', 'special_characters' => '-, $, #' ); if ($results->getSuccessIndicator() === false) { $field->messages = $results->getValidateMessages(); } elseif ($results->getChangeIndicator() === true) { $field->value = $results->getFieldValue(); }
示例:数据收集
如果您定义了哪些字段属于数据收集以及每个字段应用了哪些约束,Molajo Fieldhandler 可以像以下示例所示,非常简单地管理约束验证。
// 1. Instantiate the Molajo Fieldhandler and inject $fieldhandler into class $fieldhandler = new Molajo\Fieldhandler\Request(); // 2. Process all fields in a loop foreach ($data_object as $field) { $results = $request->ensureFieldConstraints( $field->name, $field->value, $field->tests, $field->options); if ($results->getSuccessIndicator() === false) { $field->messages = $results->getValidateMessages(); } elseif ($results->getChangeIndicator() === true) { $field->value = $results->getFieldValue(); } }
创建自定义约束
未完成
消息
未完成
包约束
本节中的示例假设 Fieldhandler 已按以下方式实例化
$fieldhandler = new Molajo/Fieldhandler/Driver();
别名
别名URL缩略中的每个字符必须是字母数字或破折号。
验证
验证值是否满足约束,返回TRUE或FALSE结果和错误消息
$response = $request->validate('alias_field', 'This will not validate', 'Alias'); if ($response->getValidateResponse() === true) { // all is well } else { foreach ($response->getValidateMessages as $code => $message) { echo $code . ': ' . $message . '/n'; } }
清理
将值转换为可用的URL别名。在这个例子中,$field_value
将包含jack-and-jill
。
$response = $request->sanitize('alias_field', 'Jack and Jill', 'Alias'); if ($response->getChangeIndicator() === true) { $field_value = $response->getFieldValue(); }
格式
对于alias
,format
方法产生的结果与sanitize
相同。
字母
别名URL中的每个字符必须是字母。要允许'空格字符',请使用allow_space_character
$选项。
验证
验证值是否满足约束,返回TRUE或FALSE结果和错误消息
$options = array(); $options['allow_space_character'] = true; $response = $request->validate('employee_name', 'Pat 3Nelson', 'Alpha', $options); if ($response->getValidateResponse() === true) { // all is well } else { foreach ($response->getValidateMessages as $code => $message) { echo $code . ': ' . $message . '/n'; } }
清理
移除不符合约束定义的字符。在这个例子中,$field_value
将包含Pat Nelson
。
$options = array(); $options['allow_space_character'] = true; $response = $request->sanitize('employee_name', 'Pat 3Nelson', 'Alpha'); if ($response->getChangeIndicator() === true) { $field_value = $response->getFieldValue(); }
格式
对于此约束,未实现format
方法。发送的值不会进行评估或更改。
字母数字
别名URL中的每个字符必须是一个字符或一个数字。要允许'空格字符',请使用allow_space_character
$选项。
验证
验证值是否满足约束,返回TRUE或FALSE结果和错误消息
$options = array(); $options['allow_space_character'] = true; $response = $request->validate('description', '4 dogs and #3 cats', 'Alphanumeric', $options); if ($response->getValidateResponse() === true) { // all is well } else { foreach ($response->getValidateMessages as $code => $message) { echo $code . ': ' . $message . '/n'; } }
清理
移除不符合约束定义的字符。在这个例子中,$field_value
将包含4 dogs and 3 cats
。
$options = array(); $options['allow_space_character'] = true; $response = $request->sanitize('description', '4 dogs and #3 cats', 'Alphanumeric', $options); if ($response->getChangeIndicator() === true) { $field_value = $response->getFieldValue(); }
格式
对于此约束,未实现format
方法。发送的值不会进行评估或更改。
数组
必须是数组。如果提供了$options['valid_values_array'],则数组值必须与有效数组中的值匹配。如果指定了$options['array_minimum'],则数组条目不得小于该值。如果指定了$options['array_maximum'],则数组条目不得超过该值。
验证
验证值(或值的数组)是否符合约束,返回TRUE或FALSE结果和错误信息
在这个例子中,$response->getValidateResponse()是TRUE,因为b
和c
都在有效的a
、b
、c
数组中,并且因为输入数组中有两个条目,这超过了允许的最小值1。
$options = array(); $options['valid_values_array'] = array('a', 'b', 'c'); $options['array_minimum'] = 1; $response = $request->validate('array_field', array('b', 'c'), 'Array', $options); if ($response->getValidateResponse() === true) { // all is well } else { foreach ($response->getValidateMessages as $code => $message) { echo $code . ': ' . $message . '/n'; } }
清理
如果数组不符合约束定义,则返回NULL。
在这个例子中,由于b
和c
不在有效的数组值中,$field_value是NULL。
$options = array(); $options['valid_values_array'] = array('x', 'y', 'z'); $response = $request->validate('array_field', array('b', 'c'), 'Array', $options); if ($response->getChangeIndicator() === true) { $field_value = $response->getFieldValue(); }
格式
未实现。发送的值不变。
布尔值
字符必须是true或false或NULL。(如果禁止NULL,请使用默认值和/或必填项。)
验证
验证值是否满足约束,返回TRUE或FALSE结果和错误消息
$response = $request->validate('boolean_field', true, 'Boolean'); if ($response->getValidateResponse() === true) { // all is well } else { foreach ($response->getValidateMessages as $code => $message) { echo $code . ': ' . $message . '/n'; } }
清理
对true或false进行清理,否则返回NULL。
$response = $request->validate('boolean_field', 'dog', 'Boolean'); if ($response->getChangeIndicator() === true) { $field_value = $response->getFieldValue(); }
格式
未实现。发送的值不进行评估或更改。
回调
启用使用自定义的可调用函数或方法来清理、过滤和格式化数据。
验证
验证值是否满足约束,返回TRUE或FALSE结果和错误消息
在这个例子中,数据值'hello'被输入到回调'strtoupper'中,并将结果'HELLO'与原始值进行比较。由于值不同,返回false
。
$options = array(); $options['callback'] = 'strtoupper'; $response = $request->validate('callback_field', 'hello', 'Callback', $options); if ($response->getValidateResponse() === true) { // all is well } else { foreach ($response->getValidateMessages as $code => $message) { echo $code . ': ' . $message . '/n'; } }
清理
在数据值上执行可调用函数以产生一个清理后的结果。
在这个例子中,$field_value
将产生HELLO
。
$options = array(); $options['callback'] = 'strtoupper'; $response = $request->sanitize('callback_field', 'hello', 'Callback', $options); if ($response->getChangeIndicator() === true) { $field_value = $response->getFieldValue(); }
格式
对于callback
,format
方法产生的结果与sanitize
相同。它可以用来格式化数据,按需使用。
包含
在字符串中,存在指定的值。
验证
验证值是否满足约束,返回TRUE或FALSE结果和错误消息
在这个例子中,响应是false
,因为字符串不包含指定的值。
$options = array(); $options['contains'] = 'dog'; $response = $request->validate('field_name', 'The cat meows.', 'Contains', $options); if ($response->getValidateResponse() === true) { // all is well } else { foreach ($response->getValidateMessages as $code => $message) { echo $code . ': ' . $message . '/n'; } }
清理
如果字符串中不存在指定的值,则设置字段为null。
在这个例子中,$field_value是NULL。
$options = array(); $options['contains'] = 'dog'; $response = $request->validate('field_name', 'The cat meows.', 'Contains', $options); if ($response->getChangeIndicator() === true) { $field_value = $response->getFieldValue(); }
格式
对于此约束,未实现format
方法。发送的值不会进行评估或更改。
控制字符
每个字符必须是一个控制字符(例如,换行符、制表符、转义符)。要允许'空格字符',请使用allow_space_character
$选项。
验证
验证值是否满足约束,返回TRUE或FALSE结果和错误消息
$options = array(); $options['allow_space_character'] = true; $response = $request->validate('text_field', '\n\r\t', 'Controlcharacters', $options); if ($response->getValidateResponse() === true) { // all is well } else { foreach ($response->getValidateMessages as $code => $message) { echo $code . ': ' . $message . '/n'; } }
清理
移除不符合约束定义的字符。在这个例子中,$field_value
将包含\n \r \t
。
$options = array(); $options['allow_space_character'] = true; $response = $request->sanitize('text_field', 'N\n \r \t', 'Alpha'); if ($response->getChangeIndicator() === true) { $field_value = $response->getFieldValue(); }
格式
对于此约束,未实现format
方法。发送的值不会进行评估或更改。
日期
必须是一个有效的格式化日期。
验证
根据在$options['create_from_format']中定义的格式验证日期,如果有效则返回true,如果无效则返回false和错误信息。
$options = array(); $options['create_from_format'] = 'Y-m-d'; $response = $request->sanitize('date_field', '2013-12-31', 'Date', $options); if ($response->getValidateResponse() === true) { // all is well } else { foreach ($response->getValidateMessages as $code => $message) { echo $code . ': ' . $message . '/n'; } }
清理
验证日期,如果日期不符合约束,则返回null for $field_value。
$options = array(); $options['create_from_format'] = 'Y-m-d'; $response = $request->sanitize('date_field', '2013-12-31', 'Date', $options); if ($response->getChangeIndicator() === true) { $field_value = $response->getFieldValue(); }
格式
根据在$options['display_as_format']中定义的格式格式化日期;
$options = array(); $options['create_from_format'] = 'Y-m-d'; $options['display_as_format'] = 'd/m/Y'; $response = $request->sanitize('date_field', '2013-12-31', 'Date', $options); echo $response->getFieldValue();
默认值
为清理和验证应用默认值,如果验证需要默认值则进行检查。
验证
验证值是否为空,如果是,则返回一个FALSE,表示未应用默认值。如果字段有值,则验证返回TRUE。
$response = $request->validate('any_field', null, 'Default'); if ($response->getValidateResponse() === true) { // all is well } else { foreach ($response->getValidateMessages as $code => $message) { echo $code . ': ' . $message . '/n'; } }
清理
如果值是NULL,则将$options
数组中定义的默认值应用于该值。
$options = array(); $options['default_value'] = $default; $response = $request->validate('any_field', NULL, 'Default'); if ($response->getChangeIndicator() === true) { $field_value = $response->getFieldValue(); }
格式
未实现。发送的值不进行评估或更改。
数字
每个字符必须是一个数字。要允许空格字符,请使用allow_space_character
$option。
验证
验证值是否满足约束,返回TRUE或FALSE结果和错误消息
$options = array(); $options['allow_space_character'] = true; $response = $request->validate('digit_fieldname', '1 2 3 4 5', 'Digit', $options); if ($response->getValidateResponse() === true) { // all is well } else { foreach ($response->getValidateMessages as $code => $message) { echo $code . ': ' . $message . '/n'; } }
清理
删除不符合约束定义的字符。在此示例中,$field_value
将包含1 2 3 4 5
。
$options = array(); $options['allow_space_character'] = true; $response = $request->sanitize('text_field', '1x 2x 3x 4x 5x', 'Digit'); if ($response->getChangeIndicator() === true) { $field_value = $response->getFieldValue(); }
格式
对于此约束,未实现format
方法。发送的值不会进行评估或更改。
电子邮件
仅允许字母、数字和!#$%&'()*+-/=?^_{}|~@.[\]`
。
验证
验证值是否满足约束,返回TRUE或FALSE结果和错误消息
此示例返回true。
$response = $request->validate('email_field', 'AmyStephen@gmail.com', 'Email'); if ($response->getValidateResponse() === true) { // all is well } else { foreach ($response->getValidateMessages as $code => $message) { echo $code . ': ' . $message . '/n'; } }
清理
删除不符合约束定义的字符。在此示例中,$field_value
将变为NULL。
$response = $request->sanitize('email_field', 'not a valid email', 'Email'); if ($response->getChangeIndicator() === true) { $field_value = $response->getFieldValue(); }
格式
格式化返回一个模糊的电子邮件地址。
$options = array(); $options['obfuscate_email'] = true; $response = $request->sanitize('email_field', 'AmyStephen@gmail.com', 'Email', $options); if ($response->getChangeIndicator() === true) { $field_value = $response->getFieldValue(); }
编码
URL编码字符串,可选地删除或编码特殊字符。
以下标志可以通过将它们添加到选项数组中应用(请参阅示例)
- FILTER_FLAG_STRIP_LOW
- FILTER_FLAG_STRIP_HIGH
- FILTER_FLAG_ENCODE_LOW
- FILTER_FLAG_ENCODE_HIGH
验证
验证值是否满足约束,返回TRUE或FALSE的结果和错误消息。对于编码,原始值与净化值进行比较。如果这些值匹配,则返回true。否则,响应为false,并提供错误消息。
$response = $request->validate('encode_field', 'AmyStephen@gmail.com', 'Encode'); if ($response->getValidateResponse() === true) { // all is well } else { foreach ($response->getValidateMessages as $code => $message) { echo $code . ': ' . $message . '/n'; } }
清理
删除不符合约束定义的字符。
在此示例中,输入URL是something.php?text=unknown values here
。结果是unknown%20values%20here
。
$response = $request->sanitize('encode_field', 'unknown values here', 'Encode'); if ($response->getChangeIndicator() === true) { $field_value = $response->getFieldValue(); }
格式
此约束未实现格式化。
等于
测试值是否等于指定的值。
// The value of field `field1` is 'dog' and is tested to see if it matches 'dog'. $results = $request->sanitize('field1', 'dog', 'Equal');
假
值必须符合$valid_values_array中定义的其中一个值。
要覆盖,请发送一个选项条目,其中包含所需值
$valid_values_array = array(false, 0, 'no', 'off'); $options = array(); $options['valid_values_array'] = $valid_values_array;
验证
验证值是否满足约束,返回TRUE或FALSE结果和错误消息
$response = $request->validate('false_only_field', $value, 'False'); if ($response->getValidateResponse() === true) { // all is well } else { foreach ($response->getValidateMessages as $code => $message) { echo $code . ': ' . $message . '/n'; } }
清理
如果值不在$valid_values_array中定义,则返回null。
$response = $request->validate('false_only_field', $value, 'False'); if ($response->getChangeIndicator() === true) { $field_value = $response->getFieldValue(); }
格式
未实现。发送的值不变。
文件扩展名
值必须符合$valid_values_array中定义的其中一个值。
要覆盖,请发送一个选项条目,其中包含所需值
$valid_values_array = array('gif', 'jpeg', 'jpg', 'png', 'pdf', 'odt', 'txt', 'rtf', 'mp3'); $options = array(); $options['valid_values_array'] = $valid_values_array;
验证
验证值是否满足约束,返回TRUE或FALSE结果和错误消息
$response = $request->validate('file_extension_field', '.pdf', 'Fileextension'); if ($response->getValidateResponse() === true) { // all is well } else { foreach ($response->getValidateMessages as $code => $message) { echo $code . ': ' . $message . '/n'; } }
清理
如果值不在$valid_values_array中定义,则返回null。
$response = $request->validate('file_extension_field', '.pdf', 'Fileextension'); if ($response->getChangeIndicator() === true) { $field_value = $response->getFieldValue(); }
格式
未实现。发送的值不变。
浮点数
删除所有字符,除了数字、+-和可选的.、eE。
可以通过为每个所需的标志定义$option条目使用以下标志
$options = array(); $options[FILTER_FLAG_ALLOW_FRACTION] = true; $options[FILTER_FLAG_ALLOW_THOUSAND] = true; $options[FILTER_FLAG_ALLOW_SCIENTIFIC] = true;
验证
验证值是否满足约束,返回TRUE或FALSE结果和错误消息
此示例返回true。
$options = array(); $options[FILTER_FLAG_ALLOW_FRACTION] = true; $response = $request->validate('float_field', 0.2345, 'Float'); if ($response->getValidateResponse() === true) { // all is well } else { foreach ($response->getValidateMessages as $code => $message) { echo $code . ': ' . $message . '/n'; } }
清理
删除不符合约束定义的字符。在此示例中,$field_value
将变为NULL。
$response = $request->sanitize('float_field', 'Dog', 'Float'); if ($response->getChangeIndicator() === true) { $field_value = $response->getFieldValue(); }
格式
对于此约束,未实现format
方法。发送的值不会进行评估或更改。
外键
使用在$options['database']中定义的数据库连接来执行查询,以验证是否存在具有指定名称的表中的一个名为$options['key']的字段,其值为$field_value。
$field_name = 'my_foreign_key'; $field_value = 1; $constraint = 'Foreignkey'; $options = array(); $options['database'] = $database; $options['table'] = 'molajo_actions'; $options['key'] = 'id'; $results = $request->validate($field_name, $field_value, $constraint, $options);
Fromto
验证$field_value是否大于From值且小于To值。
$field_name = 'my_field'; $field_value = 5; $constraint = 'Fromto'; $options = array(); $options['from'] = 0; $options['to'] = 10; $results = $request->validate($field_name, $field_value, $constraint, $options);
Fullspecialchars
将特殊字符转换为HTML实体
'&'(和号)变为 '&',"(双引号)变为 '"',当ENT_NOQUOTES未设置时。'(单引号)变为'''(或)仅当ENT_QUOTES设置时。'<'(小于)变为 '<','>'(大于)变为 '>'。
可以通过以下方式禁用引号的编码
$options = array(); $options[FILTER_FLAG_NO_ENCODE_QUOTES] = true;
验证
未实现。将始终返回false。
清理
将特殊字符转换为HTML实体
$response = $request->validate('text_field', $data_value, 'Fullspecialchars'); if ($response->getChangeIndicator() === true) { $field_value = $response->getFieldValue(); }
格式
未实现。将返回发送的值不变。
图形
每个字符必须是一个可见的可打印字符。要允许空格字符,请使用allow_space_character
$option。
验证
验证值是否满足约束,返回TRUE或FALSE结果和错误消息
$options = array(); $options['allow_space_character'] = true; $response = $request->validate('space_field', 'This is visible.\n\r\t', 'Graph', $options); if ($response->getValidateResponse() === true) { // all is well } else { foreach ($response->getValidateMessages as $code => $message) { echo $code . ': ' . $message . '/n'; } }
清理
删除不符合约束定义的字符。在此示例中,$field_value
将包含This is visible.
。
$options = array(); $options['allow_space_character'] = true; $response = $request->sanitize('space_field', 'This is visible.\n\r\t', 'Graph', $options); if ($response->getChangeIndicator() === true) { $field_value = $response->getFieldValue(); }
格式
对于此约束,未实现format
方法。发送的值不会进行评估或更改。
十六进制
每个字符必须是一个数字。要允许空格字符,请使用allow_space_character
$option。
验证
验证值是否满足约束,返回TRUE或FALSE结果和错误消息
$options = array(); $options['allow_space_character'] = true; $response = $request->validate('digit_fieldname', '1 2 3 4 5', 'Digit', $options); if ($response->getValidateResponse() === true) { // all is well } else { foreach ($response->getValidateMessages as $code => $message) { echo $code . ': ' . $message . '/n'; } }
清理
删除不符合约束定义的字符。在此示例中,$field_value
将包含1 2 3 4 5
。
$options = array(); $options['allow_space_character'] = true; $response = $request->sanitize('text_field', '1x 2x 3x 4x 5x', 'Digit'); if ($response->getChangeIndicator() === true) { $field_value = $response->getFieldValue(); }
格式
对于此约束,未实现format
方法。发送的值不会进行评估或更改。
HTML
添加白名单描述转义HTML实体。相当于htmlspecialchars,ENT_QUOTES设置。
$field_name = 'my_field'; $field_value = '&'; $constraint = 'Html'; $options = array(); $results = $request->validate($field_name, $field_value, $constraint, $options);
图像
测试值是否为图像。
// The value of field `numeric_field` is 'ABC123'. The filtered and escaped values will be 0. // For 'validate', an exception is thrown. The following will return 123. $results = $request->sanitize('numeric_field', '123', 'Int');
整数
包括数字、加号和减号。
验证
验证值是否满足约束,返回TRUE或FALSE结果和错误消息
此示例返回true。
$response = $request->validate('integer_field', 100, 'Integer'); if ($response->getValidateResponse() === true) { // all is well } else { foreach ($response->getValidateMessages as $code => $message) { echo $code . ': ' . $message . '/n'; } }
清理
删除不符合约束定义的字符。在此示例中,$field_value
将变为NULL。
$response = $request->sanitize('integer_field', 'AmyStephen@gmail.com', 'Integer'); if ($response->getChangeIndicator() === true) { $field_value = $response->getFieldValue(); }
格式
未实现,直接返回发送的值。
IP
测试值是否为IP地址。
// The value of field `input_field` is '127.0.0.1'. // Validate, filtered and escaped values will return the same. $results = $request->sanitize('input_field', '127.0.0.1', 'Ip');
小写
每个字符必须是一个小写字母。要允许空格字符,请使用allow_space_character
$option。
验证
验证值是否满足约束,返回TRUE或FALSE结果和错误消息
此示例返回false,因为包含非小写字母。
$options = array(); $options['allow_space_character'] = true; $response = $request->validate('lower_field', 'This is lower', 'Lower'); if ($response->getValidateResponse() === true) { // all is well } else { foreach ($response->getValidateMessages as $code => $message) { echo $code . ': ' . $message . '/n'; } }
清理
移除不符合约束定义的字符。在本例中,$field_value
将只包含小写字母 his is lower
,因为 T
和 .
不是小写。
$options = array(); $options['allow_space_character'] = true; $response = $request->sanitize('lower_field', 'This is lower.', 'Lower'); if ($response->getChangeIndicator() === true) { $field_value = $response->getFieldValue(); }
格式
将所有字符值转换为小写。在本例中,$field_value
将包含 this is lower.
。
$response = $request->format('lower_field', 'This is lower.', 'Lower'); if ($response->getChangeIndicator() === true) { $field_value = $response->getFieldValue(); }
最大值
验证或过滤/转义数值,以确保不超过最大值。
// The value of field `input_field` is 10. Maximum is 3. Validate will fail. // Filtered and escaped values will return 3. $field_name = 'my_field'; $field_value = 10; $constraint = 'Maximum'; $options = array(); $options['maximum'] = 3; $results = $request->validate($field_name, $field_value, $constraint, $options);
Mimetypes
值必须符合$valid_values_array中定义的其中一个值。
要覆盖,请发送一个选项条目,其中包含所需值
$valid_values_array = array( 'image/gif', 'image/jpeg', 'image/png', 'application/pdf', 'application/odt', 'text/plain', 'text/rtf' ); $options = array(); $options['valid_values_array'] = $valid_values_array;
验证
验证值是否满足约束,返回TRUE或FALSE结果和错误消息
$response = $request->validate('Mimetype', 'application/pdf', 'Mimetypes'); if ($response->getValidateResponse() === true) { // all is well } else { foreach ($response->getValidateMessages as $code => $message) { echo $code . ': ' . $message . '/n'; } }
清理
如果值不在$valid_values_array中定义,则返回null。
$response = $request->validate('mimetype_field', 'application/pdf', 'Mimetypes'); if ($response->getChangeIndicator() === true) { $field_value = $response->getFieldValue(); }
格式
未实现。发送的值不变。
最小值
验证或过滤/转义数值,以确保不超过最大值。
// The value of field `input_field` is 10. Minimum is 3. // Validate, filtered and escaped values will return 10. $field_name = 'my_field'; $field_value = 10; $constraint = 'Minimum'; $options = array(); $options['minimum'] = 3; $results = $request->validate($field_name, $field_value, $constraint, $options);
不等于
测试值是否不等于指定的值。
// The value of field `field1` is 'dog' and is tested to ensure it is NOT equal to 'dog'. $results = $request->sanitize('field1', 'dog', 'Notequal');
非空
值不能为空值。
验证
验证值是否满足约束,返回TRUE或FALSE结果和错误消息
$response = $request->validate('random_field', $value, 'Notnull'); if ($response->getValidateResponse() === true) { // all is well } else { foreach ($response->getValidateMessages as $code => $message) { echo $code . ': ' . $message . '/n'; } }
清理
无意义。(只有当它是 NULL 时才能返回 NULL 值。)
格式
未实现。发送的值不变。
格式
未实现。发送的值不变。
无
值必须符合$valid_values_array中定义的其中一个值。
要覆盖,请发送一个选项条目,其中包含所需值
$valid_values_array = array(false, 0, ' ', NULL); $options = array(); $options['valid_values_array'] = $valid_values_array;
验证
验证值是否满足约束,返回TRUE或FALSE结果和错误消息
$response = $request->validate('random_field', $value, 'Nothing'); if ($response->getValidateResponse() === true) { // all is well } else { foreach ($response->getValidateMessages as $code => $message) { echo $code . ': ' . $message . '/n'; } }
清理
如果值不在$valid_values_array中定义,则返回null。
$response = $request->validate('random_field', $value, 'Nothing'); if ($response->getChangeIndicator() === true) { $field_value = $response->getFieldValue(); }
格式
未实现。发送的值不变。
空
值必须是空值。
验证
验证值是否为 NULL。
$response = $request->validate('Null_only_field', $value, 'Null'); if ($response->getValidateResponse() === true) { // all is well } else { foreach ($response->getValidateMessages as $code => $message) { echo $code . ': ' . $message . '/n'; } }
清理
如果值不是非空值,则返回 null。=)
$response = $request->validate('Null_only_field', $value, 'Null'); if ($response->getChangeIndicator() === true) { $field_value = $response->getFieldValue(); }
格式
未实现。发送的值不变。
数字
字符必须是数字。
验证
验证值是否为数字。
$response = $request->validate('any_field', 234, 'Numeric'); if ($response->getValidateResponse() === true) { // all is well } else { foreach ($response->getValidateMessages as $code => $message) { echo $code . ': ' . $message . '/n'; } }
清理
如果值不是数字,则返回 null。
$response = $request->validate('any_field', 'dog', 'Numeric'); if ($response->getChangeIndicator() === true) { $field_value = $response->getFieldValue(); }
格式
未实现。发送的值不进行评估或更改。
对象
必须是对象。
验证
验证值是否为对象。
$response = $request->validate('any_field', $data_value, 'Object'); if ($response->getValidateResponse() === true) { // all is well } else { foreach ($response->getValidateMessages as $code => $message) { echo $code . ': ' . $message . '/n'; } }
清理
如果值不是对象,则返回 null。
$response = $request->validate('any_field', $data_value, 'Object'); if ($response->getChangeIndicator() === true) { $field_value = $response->getFieldValue(); }
格式
未实现。发送的值不进行评估或更改。
原始
不执行任何操作,可选地删除或编码特殊字符。FILTER_FLAG_STRIP_LOW, FILTER_FLAG_STRIP_HIGH, FILTER_FLAG_ENCODE_LOW, FILTER_FLAG_ENCODE_HIGH, FILTER_FLAG_ENCODE_AMP。请参阅sanitize filters。
// The value of field `input_field` is 10. Minimum is 3. // Validate, filtered and escaped values will return 10. $field_name = 'my_field'; $field_value = 'Me & You'; //returns 'Me & You' $constraint = 'Raw'; $options = array(); $options[FILTER_FLAG_ENCODE_AMP] = true; $results = $request->validate($field_name, $field_value, $constraint, $options);
可打印
每个字符必须是一个可打印字符。
验证
验证值是否满足约束,返回TRUE或FALSE结果和错误消息
此示例返回 false,因为包含了无法显示的控制字符。
$response = $request->validate('printable_field', 'asdf\n\r\t', 'Printable'); if ($response->getValidateResponse() === true) { // all is well } else { foreach ($response->getValidateMessages as $code => $message) { echo $code . ': ' . $message . '/n'; } }
清理
移除不符合约束定义的字符。在本例中,$field_value
将包含 asdf
。
$response = $request->sanitize('printable_field', 'asdf\n\r\t', 'Printable'); if ($response->getChangeIndicator() === true) { $field_value = $response->getFieldValue(); }
格式
对于此约束,未实现format
方法。发送的值不会进行评估或更改。
标点约束
每个字符必须是一个标点符号。要允许空格字符,请使用 allow_space_character
$选项。
验证
验证值是否满足约束,返回TRUE或FALSE结果和错误消息
$options = array(); $options['allow_space_character'] = true; $response = $request->validate('punctuation_field', 'ABasdk! @ ! $ #', 'Punctuation', $options); * if ($response->getValidateResponse() === true) { // all is well } else { foreach ($response->getValidateMessages as $code => $message) { echo $code . ': ' . $message . '/n'; } }
清理
移除不符合约束定义的字符。在本例中,$field_value
将包含 * & $ ( )
。
$options = array(); $options['allow_space_character'] = true; $response = $request->sanitize('punctuation_field', '* & $ ( )ABC', 'Punctuation', $options); * if ($response->getChangeIndicator() === true) { $field_value = $response->getFieldValue(); }
格式
对于此约束,未实现format
方法。发送的值不会进行评估或更改。
正则表达式
对输入值执行正则表达式检查。
// The value of field `input_field` may not be null $field_name = 'my_field'; $field_value = AmyStephen@Molajo.org; $constraint = 'Regex'; $options = array(); $options['regex'] = $regex_expression; $results = $request->validate($field_name, $field_value, $constraint);
必需
值不能为空值。
验证
验证值是否满足约束,返回TRUE或FALSE结果和错误消息
$response = $request->validate('random_field', $value, 'Notnull'); if ($response->getValidateResponse() === true) { // all is well } else { foreach ($response->getValidateMessages as $code => $message) { echo $code . ': ' . $message . '/n'; } }
清理
无意义。(只有当它是 NULL 时才能返回 NULL 值。)
格式
未实现。发送的值不变。
格式
未实现。发送的值不变。
某些内容
值不能是 $valid_values_array 内定义的值之一。
要覆盖,请发送一个选项条目,其中包含所需值
$valid_values_array = array(false, 0, ' ', NULL); $options = array(); $options['valid_values_array'] = $valid_values_array;
验证
验证值是否满足约束,返回TRUE或FALSE结果和错误消息
$response = $request->validate('random_field', $value, 'Something'); if ($response->getValidateResponse() === true) { // all is well } else { foreach ($response->getValidateMessages as $code => $message) { echo $code . ': ' . $message . '/n'; } }
清理
如果值在 $valid_values_array 内定义,则返回 null。
$response = $request->validate('random_field', $value, 'Something'); if ($response->getChangeIndicator() === true) { $field_value = $response->getFieldValue(); }
字符串
测试值是否为字符串。
// The value of field `input_field` may not be null $field_name = 'my_field'; $field_value = 'Lots of stuff in here that is stringy.'; $constraint = 'String'; $results = $request->validate($field_name, $field_value, $constraint);
字符串长度
测试字符串的长度是否从一个特定值到第二个值。从和到测试包括从和到值。
// The value of field `input_field` may not be null $options = array(); $options['from'] = 5; $options['to'] = 10; $results = $request->validate('My Field Name', $field_to_measure, 'Stringlength', $options);
空白约束
每个字符必须是一个空白字符。除了空白字符外,还包括制表符、垂直制表符、换行符、回车符和换页符。
验证
验证值是否满足约束,返回TRUE或FALSE结果和错误消息
$response = $request->validate('space_field', '\n \r \t', 'Space'); if ($response->getValidateResponse() === true) { // all is well } else { foreach ($response->getValidateMessages as $code => $message) { echo $code . ': ' . $message . '/n'; } }
清理
移除不符合约束定义的字符。在这个例子中,$field_value
将包含\n \r \t
。
$response = $request->sanitize('space_field', '*\n \r \t', 'Space'); if ($response->getChangeIndicator() === true) { $field_value = $response->getFieldValue(); }
格式
对于此约束,未实现format
方法。发送的值不会进行评估或更改。
电话
测试值是否为字符串。
时间
必须是有效的格式化时间。
Valitime
根据 $options['create_from_time_format'] 中定义的格式验证时间,如果有效则返回 true,否则返回 false 和错误信息。
$options = array(); $options['create_from_time_format'] = 'H:i:s'; $response = $request->sanitize('time_field', '12:30:00', 'time', $options); if ($response->getValitimeResponse() === true) { // all is well } else { foreach ($response->getValitimeMessages as $code => $message) { echo $code . ': ' . $message . '/n'; } }
清理
验证时间,如果时间不符合约束,则返回 $field_value 的 null。
$options = array(); $options['create_from_time_format'] = 'Y-m-d'; $response = $request->sanitize('time_field', '2013-12-31', 'time', $options); if ($response->getChangeIndicator() === true) { $field_value = $response->getFieldValue(); }
格式
根据 $options['display_as_time_format'] 中定义的格式格式化时间;
$options = array(); $options['create_from_time_format'] = 'Y-m-d'; $options['display_as_time_format'] = 'd/m/Y'; $response = $request->sanitize('time_field', '2013-12-31', 'time', $options); echo $response->getFieldValue();
修剪
文本不得在最后一个可见字符前后有空格。
验证
验证值是否满足约束,返回TRUE或FALSE结果和错误消息
此示例返回 false,因为包含了文本字符串前后的空格。
$response = $request->validate('upper_field', ' This is not trimmed. ', 'Upper'); if ($response->getValidateResponse() === true) { // all is well } else { foreach ($response->getValidateMessages as $code => $message) { echo $code . ': ' . $message . '/n'; } }
清理
移除不符合约束定义的字符。在本例中,$field_value
将导致 'This is trimmed.',并删除文本字面量前后的空格。
$options = array(); $options['allow_space_character'] = true; $response = $request->sanitize('upper_field', ' This is trimmed. ', 'Upper'); if ($response->getChangeIndicator() === true) { $field_value = $response->getFieldValue(); }
格式
执行清理。
真
值必须符合$valid_values_array中定义的其中一个值。
要覆盖,请发送一个选项条目,其中包含所需值
$valid_values_array = array(true, 1, 'yes', 'on'); $options = array(); $options['valid_values_array'] = $valid_values_array;
验证
验证值是否满足约束,返回TRUE或FALSE结果和错误消息
$response = $request->validate('true_only_field', $value, 'True'); if ($response->getValidateResponse() === true) { // all is well } else { foreach ($response->getValidateMessages as $code => $message) { echo $code . ': ' . $message . '/n'; } }
清理
如果值不在$valid_values_array中定义,则返回null。
$response = $request->validate('true_only_field', $value, 'True'); if ($response->getChangeIndicator() === true) { $field_value = $response->getFieldValue(); }
格式
未实现。发送的值不变。
大写
每个字符必须是一个小写字母。要允许空格字符,请使用allow_space_character
$option。
验证
验证值是否满足约束,返回TRUE或FALSE结果和错误消息
此示例返回 false,因为包含了非大写字符。
$options = array(); $options['allow_space_character'] = true; $response = $request->validate('upper_field', 'This is upper', 'Upper'); if ($response->getValidateResponse() === true) { // all is well } else { foreach ($response->getValidateMessages as $code => $message) { echo $code . ': ' . $message . '/n'; } }
清理
移除不符合约束定义的字符。在本例中,$field_value
将只包含大写字母 T
,因为没有其他字符符合约束定义。
$options = array(); $options['allow_space_character'] = true; $response = $request->sanitize('upper_field', 'This is upper.', 'Upper'); if ($response->getChangeIndicator() === true) { $field_value = $response->getFieldValue(); }
格式
将所有字符值转换为大写。在本例中,$field_value
将包含 THIS IS UPPER.
。
$response = $request->format('upper_field', 'This is upper.', 'Upper'); if ($response->getChangeIndicator() === true) { $field_value = $response->getFieldValue(); }
URL
测试一个值是否为有效的电子邮件地址。当无效时,validate 抛出异常,而 Filter 和 Escape 返回 null。
$results = $request->validate('url_field', 'http://google.com', 'Url');
值
值(或值的数组)必须在 $options['valid_values_array'] 数组中定义。
验证
验证值(或值的数组)是否符合约束,返回TRUE或FALSE结果和错误信息
在本例中,由于 a
在数组 a
、b
、c
中,$response->getValidateResponse() 返回 TRUE。
$options = array(); $options['valid_values_array'] = array('a', 'b', 'c'); $response = $request->validate('random_field', 'a', 'Values', $options); if ($response->getValidateResponse() === true) { // all is well } else { foreach ($response->getValidateMessages as $code => $message) { echo $code . ': ' . $message . '/n'; } }
清理
如果值(或值的数组)不在 $options['valid_values_array'] 中定义,则返回 null。
在本例中,由于 z
不是 a
、b
或 c
,$field_value 为 NULL。
$options = array(); $options['valid_values_array'] = array('a', 'b', 'c'); $response = $request->validate('random_field', 'z', 'Values', $options); if ($response->getChangeIndicator() === true) { $field_value = $response->getFieldValue(); }
格式
未实现。发送的值不变。
需求和合规性
- PHP 框架独立,无依赖项
- 需要 PHP 5.4 或更高版本
- 语义版本控制
- 符合
- [phpDocumentor2] (https://github.com/phpDocumentor/phpDocumentor2)
- [phpUnit Testing] (https://github.com/sebastianbergmann/phpunit)
- 作者 AmyStephen
- [Travis Continuous Improvement] (https://travis-ci.org/profile/Molajo)
- Scrutinizer 分析 使用 PHP 分析器、PHP 检测器、PHP 代码检查器、SensioLabs 安全建议检查器、PHP PDepend、外部代码覆盖率、PHP 相似性分析器进行测试
- 在 [Packagist] (https://packagist.org.cn) 上列出,并使用 [Composer] (https://getcomposer.org.cn/) 安装
- 使用 github 提交 拉取请求 和 功能
- 许可协议为 MIT 许可证 - 有关详细信息,请参阅
LICENSE
文件