7到13位,开头和结尾为数字,中间为数字和"-",但是"-"最多出现一次,请问这个正则表达式怎么写?
没办法写. 但可以把长度7-13
单独判断.
pat = /^\d+-?\d+$/
if pat =~ str && str.length >=7 && str.length <=13
do_something
end
错误声明
看了下面 @楼教主 的回答, 验证了一下, 是可行的. 关于没办法写
实在打脸.
这让我对?<=
和?=
重新查阅大量资料, 深入理解了一下. 虽然之前也是知道?=
的, 但从没想过, 其真正的内涵, 只是停留在windows(?=xp|nt)
. 认为, 其放置在匹配的最后来限制必须有xp
或nt
.
已点赞, 非常受教.
说明如下:
(?=[\d-]{7,13})
, 这里的?=
翻译很多, 我理解为, 它是对右侧字串的约束, 此处的意思是右侧字串是由数字和-
构成, 长度为7-13
位. 它只是预搜索一下, 并不影响右侧字串的匹配, 也不捕获任何匹配.
从位置来讲, ?=
可以放置在正则表达式的开头, 中间, 尾部. 但核心是, 它约束其右侧的匹配. 而?<=
则约束其左侧的匹配.
/^(?=[\d-]{7,13}$)\d+-?\d+$/