Frage

Ich schreibe also ein Registrierungsformular und möchte, dass der Anzeigename nur aus Zahlen, Buchstaben und Unterstrichen besteht.

Schauen Sie sich meinen Code an und sagen Sie mir, was ich falsch mache.

<form method="post" action="/" onsubmit="return check_form()">
    <input type="text" id="display-name" name="display-name" maxlength="255" />
    <input type="submit" />
</form>
<script type="text/javascript">
<!--
    var name_regex = /^([a-zA-Z0-9_])+/

    function check_form()
    {
        if (!name_regex.test(document.forms[0].elements[0].value))
        {
            document.forms[0].elements[0].focus()
            alert("Your display name may only contain letters, numbers and underscores")
            return false
        }
    }
-->
</script>

Es wurde offensichtlich gekürzt, sodass nichts mehr enthalten ist, das nichts mit dem Problem zu tun hat, aber selbst dieser Ausschnitt funktioniert nicht.

War es hilfreich?

Lösung

Ihr regulärer Ausdruck

/^([a-zA-Z0-9_])+/

Schaut nach

  1. Beginn der Zeichenfolge (Prüfzeichen), gefolgt von
  2. 1 oder mehrere Buchstaben, Zahlen oder Unterstriche (überprüfen)

Und was danach kommt, spielt keine Rolle.Dieser reguläre Ausdruck passt zu allem, solange er mit einem Buchstaben, einer Zahl oder einem Unterstrich beginnt

Wenn Sie ein $ am Ende, dann wird es funktionieren - $ stimmt mit „Ende der Zeichenfolge“ überein, daher kann nur dann eine Übereinstimmung erzielt werden, wenn dies der Fall ist nur Zahlen, Buchstaben und Unterstriche zwischen dem Anfang und dem Ende der Zeichenfolge.

/^([a-zA-Z0-9_])+$/

Zweitens würde ich die Verwendung vorschlagen document.getElementById('display-name').value anstatt document.forms da es nicht kaputt geht, wenn Sie den HTML-Code neu anordnen, und eher der „allgemein akzeptierte Standard für das, was zu tun ist“ ist.

Andere Tipps

Mein regulärer Ausdruck würde wie folgt aussehen: /^[a-zA-Z0-9_]+$/

bearbeiten:Ich denke, es liegt am fehlenden Zeilenende $ das lässt es scheitern.

Was bedeutet „funktioniert nicht“?Lehnt es gültige Anzeigenamen ab?Akzeptiert es ungültige Anzeigenamen?Welche?

Per @Annan, lass das weg $ würde dazu führen, dass der reguläre Ausdruck ungültige Anzeigenamen wie akzeptiert abc123!@#.

Wenn der Code gültige Anzeigenamen ablehnt, liegt das möglicherweise daran, dass die Klammern wörtlich abgeglichen werden, anstatt eine Gruppe zu bezeichnen (ich bin mir der Anführungszeichenkonvention in JS nicht sicher).

Eine einfachere Art, es zu schreiben, wäre noch

var name_regex = /^([a-z0-9_])+$/i;

Noch einfacher:

var name_regex = /^\w+$/;

Ich habe Ihr Skript getestet und mich in das Javascript eingemischt.Das scheint zu funktionieren:

<form method="post" action="/" onsubmit="return check_form()">
    <input type="text" id="display-name" name="display-name" maxlength="255" />
    <input type="submit" />
</form>
<script type="text/javascript">
    <!--
    var name_regex = /^([a-zA-Z0-9_])+$/;

    function check_form()
    {
        if (!name_regex.test(document.forms[0].elements[0].value))
        {
            document.forms[0].elements[0].focus();
            alert("Your display name may only contain letters, numbers and underscores");
            return false;
        }
    }
    -->
</script>

Tut mir leid, Leute, ich hätte genauer sein sollen.Immer wenn ich Leerzeichen hinzufügte, wurden die Werte weiterhin akzeptiert.Das Dollarzeichen $ hat es geschafft!

Mit „funktioniert nicht“ meine ich, dass ungültige Einträge durchgelassen werden (anstatt gültige Einträge nicht durchzulassen).

Wie @Annan gesagt hat, liegt dies wahrscheinlich am Fehlen des $ Zeichen am Ende des Ausdrucks, da derzeit nur ein einziges gültiges Zeichen am Anfang des Werts erforderlich ist und der Rest alles sein kann.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top