首页 文章

有限数量的正则表达式,无限中间破折号?

提问于
浏览
6

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

他可以拥有尽可能多的(中间)破折号( - ),但总数字数必须为10 .

I've managed使用 "-" 的正向前瞻编写正则表达式:

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

但我有两个问题:

  • 短划线(在我的正则表达式中)也可以在开头和结尾,这是 not valid .

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

附: valid 示例的示例:

050-6783828 050-678-38-28 0506783828

not 有效:

-0506783826 0506783826- 050678--3826

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

2 回答

  • 2

    我想你想要这样的东西:

    ^\d(?:-?\d){9}$
    
    • 以数字开头 .

    • 9次:可选短划线和另一位数字 .

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

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

    开头和结尾的数字,8组可选的短划线和数字,以及前一个数字前的可选短划线

    在eatch相邻数字之间只允许一个破折号 .

    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'))
    

相关问题