首页 > 7到13位,开头和结尾为数字,中间为数字和"-",但是"-"最多出现一次,请问这个正则表达式怎么写?

7到13位,开头和结尾为数字,中间为数字和"-",但是"-"最多出现一次,请问这个正则表达式怎么写?

7到13位,开头和结尾为数字,中间为数字和"-",但是"-"最多出现一次,请问这个正则表达式怎么写?


没办法写. 但可以把长度7-13单独判断.

pat = /^\d+-?\d+$/
if pat =~ str && str.length >=7 && str.length <=13
    do_something
end

错误声明

看了下面 @楼教主 的回答, 验证了一下, 是可行的. 关于没办法写实在打脸.

这让我对?<=?=重新查阅大量资料, 深入理解了一下. 虽然之前也是知道?=的, 但从没想过, 其真正的内涵, 只是停留在windows(?=xp|nt). 认为, 其放置在匹配的最后来限制必须有xpnt.

已点赞, 非常受教.

说明如下:

(?=[\d-]{7,13}), 这里的?=翻译很多, 我理解为, 它是对右侧字串的约束, 此处的意思是右侧字串是由数字和-构成, 长度为7-13位. 它只是预搜索一下, 并不影响右侧字串的匹配, 也不捕获任何匹配.

从位置来讲, ?=可以放置在正则表达式的开头, 中间, 尾部. 但核心是, 它约束其右侧的匹配. 而?<=则约束其左侧的匹配.


/^(?=[\d-]{7,13}$)\d+-?\d+$/
【热门文章】
【热门文章】