TypeError:pattern.test不是函数

elg*_*gis 23 html javascript regex string

我正在写一个包含大量javascript的注册表单.在编写基本功能以检查某些字符串的格式时,我遇到了这个问题(我试图自己解决它,但没有运气).在这个简化版本中,我有三个功能:一个用于检查电话号码的格式,第二个用于检查电子邮件的格式,第三个用于组合这两个功能以使其更清晰.这是代码:

<html>
<head>
    <meta charset="utf-8">
    <script>
        function filterPhone(phone){
            var pattern = "/^(()?\d{3}())?(-|\s)?\d{3}(-|\s)?\d{4}$/";
            return pattern.test(phone);
        }

        function filterEmail(email) {
            var regex = /^([a-zA-Z0-9_.+-])+\@(([a-zA-Z0-9-])+\.)+([a-zA-Z0-9]{2,4})+$/;
            return regex.test(email);
        }

        function checkForm(){
            var puh = document.getElementById("puh").value;
        var email = document.getElementById("email").value;
            if(filterPhone(puh) && filterEmail(email)){
                alert("It works");
                return true;
            } else {
                alert("Check the format!");
                return false;
            }
        }
    </script>
</head>
<body>
<form method="post" action="" name="regForm" onsubmit="return checkForm()">
    <input type="text" name="puh" id="puh" placeholder="Phonenumber"><br>
    <input type="text" name="email" id="email" placeholder="Email address"><br>
    <input type="submit" value="Check!">
</form>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)

如果我只使用函数filterEmail它工作正常,但当我同时使用它们(甚至只使用filterPhone!)时它会给我一个错误:"TypeError:pattern.test不是一个函数"("pattern"指的是第一个函数的(filterPhone)变量名称为pattern).我尝试使用exec()而不是test()并更改正则表达式模式,但都没有工作.这很奇怪,因为语法似乎是正确的.为什么会是这个原因?

the*_*eye 43

pattern必须是RegEx文字(双引号不应该在那里)像这样

var pattern = /^(()?\d{3}())?(-|\s)?\d{3}(-|\s)?\d{4}$/;
Run Code Online (Sandbox Code Playgroud)

否则你需要使用RegExpobject,并正确转义\,就像这样

var pattern = new RegExp("^(()?\\d{3}())?(-|\\s)?\\d{3}(-|\\s)?\\d{4}$");
Run Code Online (Sandbox Code Playgroud)


Gau*_*don 13

您的模式包含字符串,而不是正则表达式.

做它var pattern = /^(()?\d{3}())?(-|\s)?\d{3}(-|\s)?\d{4}$/;(没有引号)