我需要验证用户输入的字符串。 该字符串应允许数字或范围,以逗号分隔。数字必须介于1到64之间。
Sample: 1,8,7-9,10-12,20-45
逗号之前和之后允许使用空格或' - '。
答案 0 :(得分:0)
这看起来很糟糕。我不认为这是一个简单的答案,因为正则表达式匹配字符串,而不是数字。事实证明,0到64之间的数字看起来像这样
[1-6]?[0-9]
有些可能包含范围(但不包括空格或逗号)
[1-6]?[0-9](\-[1-6]?[0-9])?
修改
在这里,我手动输入空格和逗号,用"?"直接显示(一次显示或根本不显示),如果您允许多个空格,请更改相关的"?"到" *"我不能100%承诺这会起作用,但是一点一点地构建它,我相信它会起作用。
\([1-6]?[0-9]\( ?\- ?[1-6]?[0-9]\)? ?,? ?\)+
如果我做得更好,我会尝试更新。
EDIT2
如果我正确分组,我的旧模式将匹配0。让我们试试这个:
((([1-5]?[0-9])|(6[0-4])((\s?\-\s?([1-5]?[0-9])|(6[0-4]))?)(\s?,\s?)?)+
快乐的编码!如果您有任何问题,请发表评论。
答案 1 :(得分:0)
你走了,
^(?:6[0-4]|[1-5]\d|[1-9])(?: *- *(?:6[0-4]|[1-5]\d|[1-9]))?(?: *, *(?:6[0-4]|[1-5]\d|[1-9])(?: *- *(?:6[0-4]|[1-5]\d|[1-9]))?)*$
我使用<space>*
代替\s*
,因为\s
也匹配换行符。如果您对换行符没有任何问题,请使用\s
而不是空格。如果您想允许可选空格不是零或更多空格,请使用\s?
代替<space>*
。
答案 2 :(得分:0)
这应匹配1-64之间的整数。
([1-9]|[1-5][0-9]|6[0-4])
这也应该接受范围。
([1-9]|[1-5][0-9]|6[0-4])(-([1-9]|[1-5][0-9]|6[0-4]))?
在一行中匹配一个或多个。
^(([1-9]|[1-5][0-9]|6[0-4])(-([1-9]|[1-5][0-9]|6[0-4]))?\s*($|,\s*))+$