gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-28 18:25:36 26 4
gpt4 key购买 nike

我熟悉 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com