我熟悉Java正则表达式,但不熟悉Javascript正则表达式。
我想检查字符串输入的有效性,如果它看起来像一个名字。名字可以是xxxx xxx或xxx,其中x是字母。请注意,在我所说的内容中,x的数量会有所不同。所以这是我的代码:
function checkName(name) {
var pattern = new RegExp('([A-Za-z]+|[A-Za-z]+\\s[A-Za-z]+)');
return pattern.test(name);
}
我已经创建了一个函数,它将处理表单中文本输入的名称。现在它正在为迈克尔或迈克尔詹姆斯等投入工作。但是,它也适用于M3,例如它有一个数字,并且应该不工作。那么对世界上那个专家的任何帮助呢?
答案 0 :(得分:3)
JavaScript中没有matches
方法(与Java不同)。如果您只想确保整个字符串与模式匹配,请在开头添加^
,在结尾添加$
。此外,如果您的正则表达式模式是静态的,建议使用正则表达式文字符号/.../
。
使用
var pattern = /^([A-Za-z]+|[A-Za-z]+\s[A-Za-z]+)$/;
^^ ^
要进一步优化它(虽然性能提升很小),您可以使用可选组(?:....)?
(请参阅vasan' s comment):
var pattern = /^[A-Za-z]+(?:\s[A-Za-z]+)?$/;
^^^^^^^^^^^^^^^^
请参阅regex demo。
function checkName(name) {
var pattern = /^([A-Za-z]+|[A-Za-z]+\s[A-Za-z]+)$/;
return pattern.test(name);
}
let log = document.querySelector("#log"),
test = document.querySelector("#test");
test.addEventListener("input", e => {
if(checkName(test.value)){
log.style.color = "green";
log.innerHTML = "Passed!";
}else{
log.style.color = "red";
log.innerHTML = "Failed";
}
});

#test:focus{outline: none;}

<input type="text" id="test" autofocus /><br />
<span id="log"></span>
&#13;