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

标签 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,例如,它有一个编号,但应该不起作用。那么世界上的专家对此有什么帮助吗?

最佳答案

JavaScript 中没有 matches 方法(与 Java 不同)。如果您只想确保整个字符串与模式匹配,请在开头添加 ^ 并在末尾添加 $ 。另外,如果您的正则表达式模式是静态的,建议使用正则表达式文字表示法 /.../

使用

var pattern = /^([A-Za-z]+|[A-Za-z]+\s[A-Za-z]+)$/;
              ^^                                ^  

要进一步优化它(尽管性能提升很小),您可以使用可选组 (?:....)? (参见 vasancomment ) :

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>

关于与 Java 不同,Javascript 正则表达式接受不应该接受的输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39228289/

相关文章:

python - 在这种情况下如何提取 url 的一部分?

c# - 如何使用正则表达式将前面没有特殊字符的两个大写字母匹配在一起?

php - 正则表达式:如何匹配不以特定字符结尾的单词

javascript - 为什么当我们调用函数时 IE 不接受括号

javascript - 二维数组中各个数组的总和

javascript - 在对象函数中定义 getter/setter

regex - 使用正则表达式进行验证

javascript - 如何在 Angular 6的折线图chart.js中仅显示每15个x标签?

javascript - 如何使用 Google Maps Javascript API 数据层根据多边形的某些值显示多边形的颜色?

regex - 在字符串中向后查找属于集合的第一个子字符串(正则表达式?)