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?