允许数字和一个连字符(中间位置)的正则表达式

7
我正在尝试编写一个正则表达式,允许数字和仅一个连字符位于中间(不能在开头或结尾)如模式:02-0402是可以接受的,但是模式:----0204-02-04-06是不可接受的。
我尝试了这样的正则表达式,但它会允许在开头插入"-"并且允许多个"-".
'/^[0-9 \-]+$/'

我不太擅长正则表达式,需要一点解释会很有帮助。

编辑:对不起再次打扰您,但我需要数字仅为2位数(123-346)被认为是无效的。

3个回答

14

尝试这个:

/^\d{1,2}(-\d{1,2})?$/

一到两个数字,后面可选一个连字符和一到两个数字


1
和我想的一样,但你比我先发了。所以我加了个解释,点了赞,并删掉了我的回复。 - slim
很抱歉再次打扰您,但我需要数字仅为2位数(123-346)被视为无效。 - ro ko
1
是匹配2个数字还是1-2个数字?\d[2]\d\d 匹配两个数字。\d[1-2]\d\d? 匹配1或2个数字。 - slim
我更新了答案,所以它只支持一到两个数字({1,2}而不是+)(感谢@slim)。 - Oussama Jilal
@Yasmat,你注意到我使用了[]而不是{}的错误 :) - slim

5
相对容易:
^\d+(-\d+)?$

至少一个数字 (\d),后跟一个可选的包含连字符 (-) 的组,再次跟至少一个数字。


但这会使“02”无效,因为您的表达式需要一个连字符。 - Andreas Wong
啊,抱歉;我忽略了那部分说连字符是可选的。现在已经修复了。不可否认,在问题中这个要求有点难以理解,因为每个关于模式的口头解释听起来都像需要连字符。 - Joey

2

对于只包含该模式的字符串,以下方法应该有效

^(\d{2}-)?\d{2}$

一组以两个数字开头、以减号结尾,后跟一组不带减号的两个数字。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接