正则表达式以逗号分隔的列表中的值范围

use*_*657 6 regex

我想编写一个匹配数字值列表的正则表达式,以逗号分隔列表给出,允许范围.不允许空.

像:1-10,20-56,8,7

到目前为止,我有(([0-9] +)|([0-9] + - [0-9] +),)*[0-9] +.这完成了大部分工作,除了它仅错过一个范围的情况(例如:1-10不会验证).

可以省略对每个范围的检查(例如:允许20-10作为有效范围).

任何帮助,将不胜感激.

cod*_*ict 7

你可以使用正则表达式;

^([0-9]+(-[0-9]+)?)(,([0-9]+(-[0-9]+)?))*$
Run Code Online (Sandbox Code Playgroud)

正则表达式在行动


Adr*_*onk 2

您所追求的是一个(数字或范围),可选地后跟零个或多个:逗号加(数字或范围):

(?:\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)