使用函数php验证字段的更好方法

时间:2012-02-07 06:44:17

标签: php

对于给定字段的验证,我写了这样的函数。请检查并改进我的功能,使项目值得

我的领域

try{
    $message = 'First Name accepts keyboard characters only.';
    doValidateField ( $firstName, 'First Name', true, 100, '/^([a-zA-Z0-9._\- #,^&`~<>:!@$(){}\"\';\*\[\]?%| \n \r \t]*)$/', $message );
} catch ( Exception $e ) {
    $errorMessage = $e->getMessage ();
    echo $errorMessage;
}

功能

/*
* The following function is validates the fields
* @params unknown values $fieldValue, $fieldName, $required, $maxLength, $mask, $message
* @return tables rows $rowResponse
*/

function doValidateField($fieldValue, $fieldName, $required, $maxLength, $mask, $message) {
    // Checking the required field is empty or not
    if ($required) {
        if (strlen ( $fieldValue ) <= 0) {
            throw new Exception ( $fieldName . " is required." );
        }
    }

    // Check field length is not greater than allowed length
    if (strlen ( $fieldValue ) > $maxLength) {
        throw new Exception ( $fieldName . " cannot be greater than " . $maxLength . " characters." );
    }

    // check if specified mask exists in the field
    if (! (preg_match ( $mask, $fieldValue ))) {
        throw new Exception ( $message );
    }

}

1 个答案:

答案 0 :(得分:0)

这可能与你想要的答案相比没那么具体,但我建议你看一下Zend_Validator类使用的一些模式和想法。 (它说“Zend”,但它不是PHP的默认部分。)

关于那个说明:

  • 我不会抛出异常。它可以更容易地找到第一个问题,但更难以循环遍历多个验证器。通常情况下,您需要向人们显示所有他们犯错误的地方,而不是仅显示第一个问题,并让他们反复提交表单以便完成所有工作。
  • 不要制作验证功能,制作验证课程。基本上,使用OOP。它不仅可以提供更清晰,更易于改进的代码,而且可以根据需要制作验证器的副本并稍微调整其规则/消息。
  • 请记住,当您开始处理重音字符或不同语言时,事情会变得有点奇怪。弄清楚你正在建造的东西是否需要额外的工作。