我正在尝试制作一个正则表达式,以便仅此类数字:
可以输入2977777
,(032)2977777
,297-77-77
,297 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
);
答案 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(在您的Web应用程序执行期间不会更改),您可以同时使用两者,但最好使用文字方法来避免使用字符串换码符常见的错误。
对于动态RegExp(取决于输入),只能使用构造函数方法创建RegExp。例如,可以使用 replaceAll 方法的实现,该方法接受要在整个字符串中替换的输入。
这里有Mozilla有关RegExp的JavaScript文档,其中包括一些文字和构造方法的示例。