正则表达式接受用逗号分隔的数字和/或数字范围,但在1-64范围内

时间:2015-01-15 15:05:06

标签: regex numbers expression comma hyphen

我需要验证用户输入的字符串。 该字符串应允许数字或范围,以逗号分隔。数字必须介于1到64之间。

Sample: 1,8,7-9,10-12,20-45

逗号之前和之后允许使用空格或' - '。

3 个答案:

答案 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>*

DEMO

答案 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*))+$