2012-07-31 1411 views
0

我建立这应该接受字符串只与下列格式的应用程序:JS正则表达式只允许数字,分号和连字符

  1. 12345(仅一个数字)
  2. 12345; 23456(两个或两个以上由分隔的数字;)
  3. 12345-12367(一系列由分隔的数字 - )

的Java脚本的正则表达式应仅允许上述格式&不应接受任何其他格式或符号。任何人都可以想出一个正则表达式吗?

+1

您不能使用正则表达式来保证最后一个是有效范围。 – 2012-07-31 14:03:15

+0

如果你使用分号作为字段之间的分隔符,也许你应该'拆分'字符串并检查每个元素是否与其他两个条件匹配。 – 2012-07-31 14:03:20

+0

前两个很简单:'/ ^(\ d +)(; \ d +)?$ /' – 2012-07-31 14:04:16

回答

1

这是你所需要的正则表达式:/^\d+((;\d+)*|-\d+)?$/

(;\d+)*将检查分隔多个号码“;”

-\d+将检查范围

+0

如果是字符类中的第一个或最后一个字符,我猜不需要跳过连字符。 – 2012-07-31 14:06:32

+0

做了一个编辑,我逃过了一切,我不知道:) – micnic 2012-07-31 14:09:41

+0

同样在这里'=]'只是评论,因为一些人更喜欢代码“更清洁”(少不必要的转义)。 – 2012-07-31 14:10:44

1

尝试

^[0-9]+([;-][0-9]+)?$ 

这应该工作

[0-9]+匹配1个或多个数字 [; - ]匹配;-

(...)?是一个可选匹配

^锚开始和$锚绳

+0

添加锚'^ $'... – 2012-07-31 14:06:31

+0

啊谢谢,我只是这样做;) – 2012-07-31 14:07:40

0

假设你正在寻找数部分的结束是每次5个位数,下面应该匹配你想要什么。

[0-9]{5}((;|-)[0-9]{5}){0,1} 

如果需要不同的长度,则可以更新{5}与任一另一固定长度或诸如{3,5}的范围为3至5的数字串。如果你希望能够与speperators上市捕捉到超过两个号码,可以用

[0-9]{5}((;|-)[0-9]{5})* 
0

^[0-9 - ] {0,50} $

0- 9只接受数字

- ;只允许 - 和;

{0,50}只允许50个字符

相关问题