JavaScript RegExp用于电话号码验证,需要在数字之间使用连字符和空格

时间:2018-10-20 13:16:00

标签: javascript regex angular-reactive-forms phone-number

App.component.html

.audio

App.component.ts

const p = document.getElementById("randomWord");
const myWords = [
    {
       text: "alpha",
       audio: "alpha.mp3"
    },
    {
       text: "bravo",
       audio: "bravo.mp3"
    }
 ];
 let remainingWords = [];

function randomize() {
  if (remainingWords.length === 0) remainingWords = myWords.slice();
  let length = remainingWords.length;
  let randomIndex = Math.floor(Math.random() * length);
  const word = remainingWords[randomIndex];
  remainingWords.splice(randomIndex, 1);
  console.log(word);
  console.dir(p);
  p.textContent = word.text;
// your audio code here like audio.play(word.audio);
}

我需要遵循以下规则的电话正则表达式,我尝试了正则表达式代码,但无法正常工作。

  1. 字段不能为空。
  2. 连字符和空格将在数字之间而不是开头和结尾之间接受。
  3. 除了数字,空格或连字符外,不得包含其他任何内容
  4. 字段不得仅包含空格
  5. 字段不得仅包含连字符
  6. 字段不得仅包含连字符和空格。

谢谢。

2 个答案:

答案 0 :(得分:1)

尝试以下模式:

^\d([0-9 -]{0,10}\d)?$

console.log(/^\d([0-9 -]{0,10}\d)?$/.test('123'));             // pass
console.log(/^\d([0-9 -]{0,10}\d)?$/.test('1-2 3'));           // pass
console.log(/^\d([0-9 -]{0,10}\d)?$/.test('1-2-3-4-5-6'));     // pass
console.log(/^\d([0-9 -]{0,10}\d)?$/.test('1-2-3-4-5-6-'));    // fail
console.log(/^\d([0-9 -]{0,10}\d)?$/.test('123456789012'));    // pass
console.log(/^\d([0-9 -]{0,10}\d)?$/.test('1234567890123'));   // fail
console.log(/^\d([0-9 -]{0,10}\d)?$/.test('- --'));            // fail

上面失败的三个例子是因为:

  • 1-2-3-4-5-6-以连字符结尾,而不是数字
  • 1234567890123有13位数字,太长了
  • ---仅包含连字符和空格

答案 1 :(得分:1)

以下正则表达式应该执行您想要的操作:

^(?=.*(?:(?:\d[ -]?){1,12}))\d(?:[0-9 -]*\d)?$

说明:

^ =从头开始

(?=.*请留意零个或多个字符,然后跟着:

(?:启动一个非捕获组

\ d [-]?一个数字,后跟一个可选的空格或连字符

{1,12}匹配这些数字中的1到12

\d匹配数字

(?:启动一个新的非捕获组

[0-9 -]*\d一个数字或一个空格或一个连字符(零个或多个),后跟一个数字

?使组成为可选

$匹配字符串的结尾

这将匹配最多12个numbers(带空格和连字符)的字符串。