TypeError: pattern.test ist keine Funktion

Lesezeit: 2 Minuten

Benutzer-Avatar
Elgis

Ich schreibe ein Anmeldeformular, das eine Menge Javascript enthält. Beim Schreiben der grundlegenden Funktionen zum Überprüfen des Formats bestimmter Zeichenfolgen bin ich auf dieses Problem gestoßen (ich habe versucht, es selbst zu lösen, aber kein Glück). In dieser vereinfachten Version habe ich drei Funktionen: eine, um das Format der Telefonnummer zu überprüfen, die zweite, um das Format der E-Mail zu überprüfen, und die dritte, um diese beiden Funktionen zu kombinieren, um es klarer zu machen. Hier ist der Code:

<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>

Wenn ich nur die Funktion filterEmail verwende, funktioniert es gut, aber wenn ich beide verwende (oder sogar nur das filterPhone!), Gibt es mir einen Fehler: “TypeError: pattern.test ist keine Funktion” (“Muster” bezieht sich auf den Variablennamen der ersten Funktion (filterPhone) namens Muster). Ich habe versucht, exec() anstelle von test() zu verwenden und das Regex-Muster zu ändern, beides hat nicht funktioniert. Das ist ziemlich seltsam, da die Syntax korrekt zu sein scheint. Warum könnte der Grund sein?

Dein pattern muss wie folgt ein RegEx-Literal sein (doppelte Anführungszeichen, die nicht vorhanden sein sollten).

var pattern = /^(()?\d{3}())?(-|\s)?\d{3}(-|\s)?\d{4}$/;

Andernfalls müssen Sie verwenden RegExp Objekt, mit richtigem Escapezeichen für \so was

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

  • RegEx-Literal (doppelte Anführungszeichen, die nicht da sein sollten), das ist etwas Neues für mich. Vielen Dank.

    – Elektroid

    21. April 2016 um 5:01 Uhr

  • In meinem Fall habe ich gewechselt value.test(/*/) zu value.match(/*/) und es hat funktioniert, hier ist der Unterschied

    Benutzer7075574

    25. September 2020 um 3:16 Uhr


Ihr Muster enthält a Schnurund kein regulärer Ausdruck.

Mach es var pattern = /^(()?\d{3}())?(-|\s)?\d{3}(-|\s)?\d{4}$/; (ohne Anführungszeichen)

Außerdem unbedingt schreiben /pattern/.test("string") im Gegensatz zu "string".test(/pattern/).

Auf ein ähnliches Problem gestoßen.

Lösung: verwenden .match() Anstatt von .test() Methode

1175820cookie-checkTypeError: pattern.test ist keine Funktion

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy