3

我正在尝试做一个正则表达式来验证 9 到 13 个数字之间的数字,但是序列可以有破折号和空格,理想的情况是不要连续有多个空格或破折号。

此规则允许我控制 9 到 13 之间的验证

/^[\d]{9,13}$/ 

现在添加破折号和空格

/^[\d -]{9,13}$/

我想我需要这样的东西,但我需要数数

/^[ -](?:\d){9,13}$/

有小费吗?

4

4 回答 4

4

请注意我的正则表达式如何以数字开头和结尾。此外,这可以防止连续的空格和破折号。

/^\d([ \-]?\d){7,12}$/

于 2013-09-22T21:48:35.930 回答
3

看来您不希望前导或尾随空格和破折号。这应该这样做。

/^\d([- ]*\d){8,12}$/

正则表达式:

\d          digits (0-9)
 (          group and capture to \1 (between 8 and 12 times)
 [- ]*      any character of: '-', ' ' (0 or more times)
   \d       digits (0-9)
 ){8,12}    end of \1 

另一种选择:一个数字后跟任意数量的空格或破折号 8-12 次,然后是一个数字。

/^(\d[- ]*){8,12}\d$/
于 2013-09-22T22:51:43.050 回答
0

假设空格后面有一个破折号,反之亦然是可以的:

^( -?|- ?)?(\d( -?|- ?)?){9,13}$

解释:

( -?|- ?)- 这相当于( | -|-|- ). 请注意,此处不能有 2 个连续的破折号或空格,并且只能出现在开头或数字之后,因此这可以防止字符串中出现 2 个连续的破折号或空格。

并且显然必须只有一位数字(\d( -?|- ?)?),因此{9,13}强制执行 9-13 位数字。

假设空格后面有破折号,反之亦然是不行的:

^[ -]?(\d[ -]?){9,13}$

解释同上。

以上两种方法都允许字符串以数字、破折号或空格开头或结尾。

于 2013-09-22T21:49:57.513 回答
0

使用前瞻来断言各种约束:

/^(?!.*(  |--))(?=(\D*\d){9,13}\D*$)[\d -]+$/ 
于 2013-09-22T21:56:39.727 回答