我在网站上搜索了很多,但我找不到我正在寻找的内容。我有我需要的开始,但我无法弄清楚最后一部分。这是我到目前为止所做的。
[0-9]+(,[0-9]+)+(-[0-9]+)*
对于我的使用,它接受以逗号和端口范围分隔的网络端口,用连字符分隔。
80,443,10001-10003
这样可以正常使用,但我不能让它只接受一个数字,例如80本身。
我尝试过以下各种变体而没有运气:
[0-9]|([0-9]+(,[0-9]+)+(-[0-9]+)*)
[0-9] OR ([0-9]+(,[0-9]+)+(-[0-9]+)*)
任何帮助都将不胜感激。
感谢。
答案 0 :(得分:1)
您可以使用
[0-9]+(?:[-,][0-9]+)*
请参阅regex demo
如果要确保完整的字符串匹配,请添加^
(字符串的开头)和$
(字符串锚点的结尾):
^[0-9]+(?:[-,][0-9]+)*$
请参阅another demo
要点:
[,-]
- 与,
或-
(?:[-,][0-9]+)*
- *
量词匹配零个或多个字符,而+
匹配一个或多个符号。因此,此构造与,
或-
的零个或多个序列匹配,后跟一个或多个数字。 如果80-2-2-2-2
之类的字符串不匹配,请使用
^\d+(?:-\d+)?(?:,\d+(?:-\d+)?)*$
请参阅another demo
答案 1 :(得分:1)
尝试使用3个术语(作为示例):
^\d+(,\d+(\d+-\d+)?)?$
或第一个必须是非范围的任意数量的术语,例如999,123-456,12,13,20-30
:
^\d+(,\d+(-\d+)?)*$
或任何数量的任何类型,例如123-456,20-30,88,99,100-102
:
^(\d+(-\d+)?(,|$))+$