【发布时间】:2011-08-29 12:45:24
【问题描述】:
我需要一些关于 php (Symfony) 中的正则表达式的帮助。
我想匹配值 1 到 60 或字符串。
对于我使用的号码:^([1-5]?[0-9]|60) 但它匹配 0 ...我现在不知道如何匹配“全部”。
你能帮帮我吗? 非常感谢之前
【问题讨论】:
-
我觉得数字范围检查不应该在正则表达式中。
我需要一些关于 php (Symfony) 中的正则表达式的帮助。
我想匹配值 1 到 60 或字符串。
对于我使用的号码:^([1-5]?[0-9]|60) 但它匹配 0 ...我现在不知道如何匹配“全部”。
你能帮帮我吗? 非常感谢之前
【问题讨论】:
您应该能够将其分为以下几种可能性:
^([1-9]|[1-5][0-9]|60|all)$
这为您提供了四种可能性:
[1-9] 个位数的值。[1-5][0-9]: 从十点到五十九点。60:六十。all:您的“全部”选项。但请记住,正则表达式并不总是每个问题的答案。
有时它们对于复杂的值检查不太有用(尽管在这种情况下,这是一个相当简单的检查)。类似于以下内容(伪代码):
def isAllOrOneThruSixty(str):
if str == "all":
return OK
if str.matches ("[0-9]+"):
val = str.convertToInt()
if val >= 1 and val <= 60:
return OK
return BAD
有时可能更冗长,但也更易读和可维护。
【讨论】:
这将满足您的所有需求
^([1-9]|[1-5]\d|60|all)$
【讨论】:
您将[1-5] 设为可选;把它转过来,像这样:[1-5][0-9]?。另外你需要覆盖个位数的[6-9]。
【讨论】:
问题是你缺少一些括号,你应该切换 60 和其余的,否则它只会匹配 60 中的 6:
^((60|([1-5]?[0-9]))|all)
【讨论】: