与Java不同,Javascript正则表达式接受不应该被接受的输入

时间:2016-08-30 13:04:18

标签: javascript regex

我熟悉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,例如它有一个数字,并且应该不工作。那么对世界上那个专家的任何帮助呢?

1 个答案:

答案 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;
&#13;
&#13;