【问题标题】:limit expression length限制表达式长度
【发布时间】:2012-03-14 07:59:11
【问题描述】:

我在我的脚本中使用以下内容来验证输入的分钟数...它仅允许以正确格式表示数千的数字和逗号...但是,我还想添加长度限制。 ..我似乎做不到,或者我只是把它放在错误的位置......这是没有限制的代码:

(!preg_match("#^(\d{1,3}(\,\d{3})*|(\d+))$#",$values['minutes']))

我想至少设置一个,最多五个...该条目是每天在线几分钟...好吧,一天只有 1440 分钟...如果您输入 1,440 这是有效的目前是 5 个字符,我想将表达式限制为...

有人吗?

【问题讨论】:

    标签: regex preg-match expression


    【解决方案1】:

    两个建议:

    preg_match("#^(?:\d{1,3}|1,?\d{3})$#"
    

    说明:

    ^        # Start of string
    (?:      # Either match...
     \d{1,3} # a three-digit number
    |        # or
     1       # a four digit number that starts with a 1
     ,?      # and may have a thousands separator
     \d{3}   # (and three more digits)
    )
    $        # End of string
    

    问题当然是这也允许1,999,所以你仍然需要额外的健全性检查。这可能是更好的解决方案。

    也可以在正则表达式本身中进行范围限制,但这很麻烦:

    preg_match("#^(?:1,?440|1,?4[0-3]\d|1,?[0-3]\d{2}|[1-9]\d{1,2}|\d)$#"
    

    说明:

    ^                # Start of string
    (?:              # Either match...
     1,?440          # 1440
    |                # or  
     1,?4[0-3]\d     # 1400-1439
    |                # or
     1,?[0-3]\d{2}   # 1000-1399
    |                # or
     [1-9]\d{1,2}    # 10-999
    |                # or
     \d              # 0-9
    )
    $                # End of string
    

    【讨论】:

    • 从来没有想过这样做 - 这会很好 - 谢谢!
    【解决方案2】:

    您最好只测试字符串的长度甚至整数值。但只是为了表明这是可能的:

    preg_match("#^(\d,\d{3}|\d{1,4})$#")
    

    是的,很简单,因为四位数字只能采用其中一种形式

    • 一位,逗号,三位
    • 四位数字

    【讨论】:

      猜你喜欢
      • 2012-07-18
      • 1970-01-01
      • 2017-01-09
      • 1970-01-01
      • 2021-06-15
      • 1970-01-01
      相关资源
      最近更新 更多