我想编写一个匹配数字值列表的正则表达式,以逗号分隔列表给出,允许范围.不允许空.
像:1-10,20-56,8,7
到目前为止,我有(([0-9] +)|([0-9] + - [0-9] +),)*[0-9] +.这完成了大部分工作,除了它仅错过一个范围的情况(例如:1-10不会验证).
可以省略对每个范围的检查(例如:允许20-10作为有效范围).
任何帮助,将不胜感激.
您所追求的是一个(数字或范围),可选地后跟零个或多个:逗号加(数字或范围):
(?:\d+(?:-\d+)?)(?:,(?:\d+(-\d+)?))*
Run Code Online (Sandbox Code Playgroud)
这使用了\d[0-9] 的快捷方式和(?: ... )非捕获括号构造。
此正则表达式不允许列表中包含任何空格。\s*为了允许这些,请在每个术语之间插入“可选空格” :
\s*(?:\d+(\s*-\s*\d+)?)\s*(?:,\s*(?:\d+(\s*-\s*\d+)?)\s*)*
Run Code Online (Sandbox Code Playgroud)