【问题标题】:Checking string length, max and minimum检查字符串长度、最大值和最小值
【发布时间】:2011-03-31 19:29:52
【问题描述】:

是否有检查字符串是否太长或太短的功能,我通常会在几个地方写这样的东西:

if (strlen($input) < 12)
{
   echo "Input is too short, minimum is 12 characters (20 max).";
}
elseif(strlen($input) > 20)
{
   echo "Input is too long, maximum is 20 characters.";
}

我知道你可以很容易地写一个,但是 PHP 中有内置的吗?

我通常在验证输入时收集错误,因此将编写上述代码:

$errors = array();

    if (strlen($input) < 12)
    {
       $errors['field_name'] = "Field Name is too short, minimum is 12 characters (20 max).";
    }
    elseif(strlen($input) > 20)
    {
       $errors['field_name'] = "Field Name is too long, maximum is 20 characters.";
    }

如何把它变成一个函数^?

【问题讨论】:

  • 你希望函数接受什么(即它的参数)并返回? PHP 中没有完全复制您的代码 sn-p 的函数,但我们可以帮助您编写一个。
  • 我写了一个建立错误列表的方法:function check_string_length($string, $label, $min, $max),但我必须有一种更优雅的方法这个。

标签: php strlen


【解决方案1】:

我猜你可以做一个这样的函数:

function validStrLen($str, $min, $max){
    $len = strlen($str);
    if($len < $min){
        return "Field Name is too short, minimum is $min characters ($max max)";
    }
    elseif($len > $max){
        return "Field Name is too long, maximum is $max characters ($min min).";
    }
    return TRUE;
}

然后你可以这样做:

$errors['field_name'] = validStrLen($field, 12, 20);

【讨论】:

    【解决方案2】:

    PHP 验证您可以使用的最小和最大整数:

    $quantity = 2;
    if (filter_var($quantity, FILTER_VALIDATE_INT, array("options" => array("min_range"=>1, "max_range"=>10))) === false) {
        echo("Quantity is not within the legal range");
    } else {
        echo("Quantity is within the legal range");
    }
    

    【讨论】:

      【解决方案3】:

      怎么样:

      $GLOBALS['errors'] = array();
      
      function addError($msg) {
          $GLOBALS['errors'][] = $msg;
      }
      
      function printErrors() {
          foreach ($GLOBALS['errors'] as $err)
              echo "$err\n";
      }
      

      只需根据需要多次调用 addError('error message here'),然后在最后调用 printErrors()。

      【讨论】:

        【解决方案4】:

        你可以使用session vars创建一个错误函数:

        //at the top of the file:
        session_start();
        //....code
        error("Field Name is too short, minimum is 12 characters (20 max).");
        //.. some code
        //at the end of the file:
        displayErrors();
        
        function error($msg){
           if(!isset($_SESSION['errors'])) $_SESSION['errors'] = array();
           $_SESSION['errors'][] = $msg;
        }
        
        function displayErrors(){
             foreach($_SESSION['errors'] as $err){
                 echo $err.'<br/>'.PHP_EOL;
             }
             unset($_SESSION['errors']);
        }
        

        在这里演示:http://codepad.org/TKigVlCj

        【讨论】:

          【解决方案5】:
          /* Helper function */
          function validateLength($value, $minLength, $maxLength, $fieldTitle) {
              $valueStrLen = strlen($value);
          
              if ($valueStrLen < $minLength) {
                  return "$fieldTitle is too short, minimum is $minLength characters ($maxLength max).";
              } elseif($valueStrLen > $maxLength) {
                  return "$fieldTitle is too long, maximum is $maxLength characters.";
              } else {
                  return '';
              }   
          }
          
          /* Example of usage */
          
          $errors = array();
          
          if ( $err = validateLength($_GET['user_name'], 12, 20, 'User name') ) {
              $errros['user_name'] = $err;
          }
          
          if ( $err = validateLength($_GET['user_pass'], 12, 20, 'Password') ) {
              $errros['user_pass'] = $err;
          }
          

          【讨论】:

            【解决方案6】:
            function validateLenght($s, $min, $max) {
                if (strlen($s) > $max) { return 2; }
                elseif (strlen($s) < $min) { return 1; }
                else { return 0; }
            }
            
            if (validateLenght('test', 5, 20) > 0) {
                echo 'Username must be between 5 and 20 characters.';
            }
            

            【讨论】:

              【解决方案7】:

              这个怎么样:

              if(((strlen($input)<12)||(strlen($input) > 20)))
                  {
                      $errors['field_name'] = "Must be 12-20 characters only. Please try again.";         
                  }
              

              【讨论】:

              • 帖子要求一个函数来检查字符串的长度。他特别要求一个函数,而不是一个 if 语句。
              猜你喜欢
              • 1970-01-01
              • 2016-11-02
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多