我正在尝试制作一个正则表达式,以便只有这样的数字:可以输入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
);
如果使用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方法的实现,该方法接受您要在整个字符串中替换的输入。
这里有有关JavaScript中RegExp的Mozilla文档,以及一些文字和构造方法的示例。