Regex表示有限的数字,不限的中间短划线

Regex for limited numbers, unlimited middle dashes?

本文关键字:中间 数字 表示 Regex      更新时间:2023-09-26

用户可以填写电话号码。(只有数字和破折号,破折号不是强制性的)

他可以有尽可能多的(中间)短划线(-),但的总位数必须为10。

我已经成功地编写了一个正则表达式,使用数字中"-"的正向前瞻:

^(?=.*'-)[0-9'-]+$

但我有两个问题:

  • 破折号(在我的正则表达式中)也可以在开头和结尾,这是无效的。

  • 我没有成功应用10位数的限制。

p.s.有效示例:

050-6783828050-678-38-280506783828

无效

-05067838260506783826-050678--3826

请注意,这个问题被标记为regex。我不是在寻找js(非正则表达式)解决方案

我想你想要这样的东西:

^'d(?:-?'d){9}$
  • 以数字开头
  • 9次:可选破折号和另一位数字

工作示例:http://rubular.com/r/CrgTOrXC8E

^[0-9](-?[0-9]){8}-?[0-9]$

起始和结束处的一个数字,8组可选短划线和数字,加上最后一个数字前的可选短划线

两个相邻数字之间只允许有一个短划线。

var pat = new RegExp('^[0-9](-?[0-9]){8}-?[0-9]$')
// correct
console.log(pat.test('0506783828'))
console.log(pat.test('0-5-0-6-7-8-3-8-2-8'))
// incorrect
console.log(pat.test('0506783828-'))
console.log(pat.test('-0506783828'))
console.log(pat.test('05--06783828'))