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

Javascript正则表达式不应该是可接受的输入,这与Java不同,javascript,regex,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); } 我已经创建了一

我熟悉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中没有匹配的
方法(与Java不同)。如果您只想确保整个字符串与模式匹配,请在开头添加
^
,在结尾添加
$
。此外,如果您的正则表达式模式是静态的,建议使用正则表达式文字符号
/…/

使用

为了进一步优化它(尽管性能增益很小),您可以使用可选组
(?:..)
(请参阅):

函数检查名称(名称){
var模式=/^([A-Za-z]+|[A-Za-z]+\s[A-Za-z]+)$/;
返回模式.测试(名称);
}
让log=document.querySelector(“#log”),
test=document.querySelector(“test”);
test.addEventListener(“输入”,e=>{
if(检查名称(测试值)){
log.style.color=“绿色”;
log.innerHTML=“已通过!”;
}否则{
log.style.color=“红色”;
log.innerHTML=“失败”;
}
});
#测试:焦点{大纲:无;}


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

使用

为了进一步优化它(尽管性能增益很小),您可以使用可选组
(?:..)
(请参阅):

函数检查名称(名称){
var模式=/^([A-Za-z]+|[A-Za-z]+\s[A-Za-z]+)$/;
返回模式.测试(名称);
}
让log=document.querySelector(“#log”),
test=document.querySelector(“test”);
test.addEventListener(“输入”,e=>{
if(检查名称(测试值)){
log.style.color=“绿色”;
log.innerHTML=“已通过!”;
}否则{
log.style.color=“红色”;
log.innerHTML=“失败”;
}
});
#测试:焦点{大纲:无;}


也许您只是想确保整个字符串与模式匹配?在开头添加
^
,在结尾添加
$
。尝试
var模式=/^([A-Za-z]+|[A-Za-z]+\s[A-Za-z]+)$/@WiktorStribiżew是的,这就是我想要的!哈哈哈,谢谢你,先生。我还不知道,但现在我知道了。我熟悉Java正则表达式,但不熟悉Javascript正则表达式。再次感谢你!:)@JudeMaranga还有,我认为下面的表达式更为理想:
^[A-Za-z]+(\\s[A-Za-z]+)?$
也许您只是想确保整个字符串与模式匹配?在开头添加
^
,在结尾添加
$
。尝试
var模式=/^([A-Za-z]+|[A-Za-z]+\s[A-Za-z]+)$/@WiktorStribiżew是的,这就是我想要的!哈哈哈,谢谢你,先生。我还不知道,但现在我知道了。我熟悉Java正则表达式,但不熟悉Javascript正则表达式。再次感谢你!:)@JudeMaranga还有,我认为下面的表达式更为理想:
^[A-Za-z]+(\\s[A-Za-z]+)?$
而且你通常非常擅长标记重复项……为什么?@torazaburo:我回答是因为OP实际上来自Java。Java
字符串#matches()
在JavaScript中不存在,这一事实让我给出了一个答案。@JudeMaranga:The
(?:…)
是一个非捕获组,它只对子模式进行分组,而不在组缓冲区中存储捕获的值。
是一个与量化子模式的1或0次匹配的量词。
$
在PHP中可能在最后换行符之前匹配,请改用
\z
。它们是在开始/结束位置锚定比赛所必需的。而且你通常非常擅长标记重复项……为什么?@torazaburo:我回答是因为OP实际上来自Java。Java
字符串#matches()
在JavaScript中不存在,这一事实让我给出了一个答案。@JudeMaranga:The
(?:…)
是一个非捕获组,它只对子模式进行分组,而不在组缓冲区中存储捕获的值。
是一个与量化子模式的1或0次匹配的量词。
$
在PHP中可能在最后换行符之前匹配,请改用
\z
。它们是在开始/结束位置锚定比赛所必需的。
var pattern = /^([A-Za-z]+|[A-Za-z]+\s[A-Za-z]+)$/;
              ^^                                ^  
var pattern = /^[A-Za-z]+(?:\s[A-Za-z]+)?$/;
                         ^^^^^^^^^^^^^^^^