7

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

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

我已经设法使用数字中的正前瞻来编写正则表达式"-"

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

但我有两个问题:

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

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

ps有效示例:

050-6783828 050-678-38-28 0506783828

无效

-0506783826 0506783826- 050678--3826

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

4

2 回答 2

9

我想你想要这样的东西:

^\d(?:-?\d){9}$
  • 从一个数字开始。
  • 9 次:可选的破折号和另一个数字。

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

于 2013-07-04T11:11:55.983 回答
2
^[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'))
于 2013-07-04T11:17:31.483 回答