允许在括号内使用整数

问题描述 投票:0回答:1

我正在尝试制作一个正则表达式,以便只有这样的数字:可以输入2977777(032)2977777297-77-77297 77 77

在网站regexr.com上,此(\((032)\))?(297)([\- ]?7{2}){2}表达式有效Result,该程序仅适用于该号码(032)2977777Result 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
);
javascript
1个回答
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方法的实现,该方法接受您要在整个字符串中替换的输入。

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

MDN RegExp

© www.soinside.com 2019 - 2024. All rights reserved.