Javascript正则表达式意外结果

时间:2013-06-07 12:58:03

标签: javascript regex

<form name="form1">
<input type="textbox" name="txtInput" />
<script type="text/javascript">
function validate() {
if (! document.form1.txtInput.value.match(/\bSun(il)? (Mishra)?\b/)){
    alert("Please enter valid value!");
} else {
    alert("Success!");
}
}
</script>
<input type="button" name="btnSubmit" onclick="validate()" value="Go" />

它在 Sunil Mishra Sun Mishra 上取得了成功,但 Sunil Sun 取得了成功。我尝试用空格输入输入,但这也不起作用。

代码中是否存在问题?

3 个答案:

答案 0 :(得分:4)

如果空格是可选的,它也需要在第二组中:

/\bSun(il)?( Mishra)?\b/

在末尾添加空格的原因不起作用是因为在空格后的字符串末尾没有单词边界(\b)。

答案 1 :(得分:1)

/\bSun(il)? (Mishra)?\b/

这与SunSunil不匹配而没有Mishra的原因是因为正则表达式模式中两个名称之间的空格。

空格未显示为可选,因此如果空格不存在,则模式将无法匹配,即使Mishra是可选的。

要解决此问题,请移动Mishra周围的括号以包含其前面的空格:

/\bSun(il)?( Mishra)?\b/

答案 2 :(得分:0)

您可以使用:/\bSun(il)?\s*(Mishra)?\b/,而不是像其他答案所指出的那样将空间添加到第二组中。这将允许多个空格,制表符等,同时还使其不受Mishra小组的影响。