【问题标题】:I wanted to allow only 1 comma between 2 letters in PHP validation我想在 PHP 验证中只允许 2 个字母之间有 1 个逗号
【发布时间】:2015-05-30 07:33:45
【问题描述】:

你好,我有一个场景,在文本框中我可以输入类似的字符串

"1,2,3" this would be allowed.

但如果有人进入,

"1,2,,3" this would not be allowed.

允许多个逗号,但不像上面那样。

提前致谢

【问题讨论】:

    标签: php regex validation


    【解决方案1】:

    试试这个正则表达式:

    /^\d(?:,\d)*$/
    

    解释:

    /            # delimiter
      ^          # match the beginning of the string
      \d         # match a digit
        (?:      # open a non-capturing group
          ,      # match a comma
          \d     # match a digit
        )        # close the group
        *        # match the previous group zero or more times
      $          # match the end of the string
    /            # delimiter
    

    如果您允许多位数字,则将 \d 更改为 \d+。

    【讨论】:

      【解决方案2】:

      试试这个,

      if(in_array("", explode(',',$str)))
      {
          // validation fail
      }
      

      【讨论】:

      • 这个问题是有点矫枉过正。您正在拆分字符串只是为了查看是否有空位。它有效,但它使用大锤敲钉子。
      • 是的,我同意你的看法,但是 OP 正在为一个复选框验证这个,IMO 我们不需要担心,直到 OP 在给定时间有 10000 名访问者,检查this 答案,它说它花了1.738441 seconds 执行 10000 次迭代,我们这里只需要一次,所以这里不应该考虑性能。如果我错了,请指导我。
      【解决方案3】:

      您可以简单地做一个正则表达式测试来检查。如果您只想防止重复逗号:

      if (preg_match('/,,/', $myString)) {
          // not allowed... do something about it
      }
      

      如果您想将其限制为仅由逗号分隔的数字模式,请将正则表达式模式交换为 '/^([0-9]+,?)+$/',它只有 1 个或多个数字,可选地后跟一个小数,该模式可以重复任意次数(但必须至少有一个数字)。另外,翻转条件,所以:

      if (!preg_match('/^([0-9]+,?)+$/', $myString)) {
          // not allowed... do something about it
      }
      

      如果您想要一些更简单的东西,这样做也可以解决它(并且效率更高,如果您只想同时测试多个逗号):

      if (strpos($myString, ',,') !== false) {
          // not allowed... do something about it
      }
      

      【讨论】:

        【解决方案4】:

        试试这个:

        if (strpos($input_string,',,') == true) {
            echo 'Invalid string';
        }
        

        【讨论】:

        • 如果我没记错的话,字符串“,”不会被检测为无效。这是否是 OP 正在考虑的用例是有问题的,但它会错过这一点,因为索引将为 0,这是不正确的。
        【解决方案5】:

        您可以使用 (preg_match 当然也可以) 检测到这一点:

        if(strpos($your_string, ',,') !== false) {
           echo "Invalid"
        }
        

        您还需要检测前导或尾随逗号吗? 还要记住,如果验证不是真的必要,你可以简单地“修复”输入,使用 explode 并过滤掉空字符串元素,然后 implode 数组:

        $your_string = implode(',', array_filter(explode(',', $your_string), function ($i) {
            return $i !== '';
        }));
        

        【讨论】:

          【解决方案6】:

          你可以使用 stristr 函数来解决这个问题

          if(stristr ($Array,',,'))
          echo 'Flase';
          else
          // do something
          

          【讨论】:

            【解决方案7】:

            使用strpos() 函数满足您的上述要求

             if (strpos($youstring,',,') == false) {
                    echo 'String not found';
                }
                else
                {
                    echo 'String is found';
                }
            

            【讨论】:

            • 这与样式链接有什么关系?
            猜你喜欢
            • 1970-01-01
            • 2017-05-10
            • 1970-01-01
            • 1970-01-01
            • 2015-09-12
            • 2021-03-04
            • 2016-10-07
            • 1970-01-01
            • 2018-11-16
            相关资源
            最近更新 更多