允许在括号内使用整数

时间:2019-11-18 17:43:35

标签: javascript

我正在尝试制作一个正则表达式,以便仅此类数字: 可以输入2977777(032)2977777297-77-77297 77 77

在网站regexr.com上,此(\((032)\))?(297)([\- ]?7{2}){2}表达式有效 Result,该程序仅适用于该数字(032)2977777 Result in console

form.addEventListener(
  "submit",
  function(event) {              //i think problem in \( and \) 
    var IndexTemplate = new RegExp("(\((032)\))?(297)([- ]?7{2}){2}");
    if (numberInput.value.length === 0) {
      numberLvivSpan.innerHTML = "Please enter the phone!";
      numberLvivSpan.className = "error active";
      event.preventDefault();
    } else if (!numberInput.value.replace(IndexTemplate, "").length) {
      numberLvivSpan.innerHTML = "Invalid phone!";
      numberLvivSpan.className = "error good";
      setTimeout(() => {
        numberLvivSpan.innerHTML = "";
        numberLvivSpan.className = "error";
      }, 1000);

      event.preventDefault();
    } else {
      numberLvivSpan.innerHTML = "Phone is valid!";
      numberLvivSpan.className = "error active";
      event.preventDefault();
    }
  },
  false
);

1 个答案:

答案 0 :(得分:0)

如果使用 new 运算符创建 RegExp ,则需要在字符串中使用反斜杠字符。

如果表达式是静态的,我建议您使用文字RegExp。

Differences between Javascript regexp literal and constructor

因此固定代码应如下所示:

form.addEventListener(
  "submit",
  function(event) {              //i think problem in \( and \) 
    var IndexTemplate = /(\((032)\))?(297)([- ]?7{2}){2}/;
    if (numberInput.value.length === 0) {
      numberLvivSpan.innerHTML = "Please enter the phone!";
      numberLvivSpan.className = "error active";
      event.preventDefault();
    } else if (!numberInput.value.replace(IndexTemplate, "").length) {
      numberLvivSpan.innerHTML = "Invalid phone!";
      numberLvivSpan.className = "error good";
      setTimeout(() => {
        numberLvivSpan.innerHTML = "";
        numberLvivSpan.className = "error";
      }, 1000);

      event.preventDefault();
    } else {
      numberLvivSpan.innerHTML = "Phone is valid!";
      numberLvivSpan.className = "error active";
      event.preventDefault();
    }
  },
  false
);

更新:使用文字时和使用RegExp构造函数时。

对于静态RegExp(在您的Web应用程序执行期间不会更改),您可以同时使用两者,但最好使用文字方法来避免使用字符串换码符常见的错误。

对于动态RegExp(取决于输入),只能使用构造函数方法创建RegExp。例如,可以使用 replaceAll 方法的实现,该方法接受要在整个字符串中替换的输入。

这里有Mozilla有关RegExp的JavaScript文档,其中包括一些文字和构造方法的示例。

MDN RegExp