Können Sie verlangen, dass zwei Formularfelder mit HTML übereinstimmen?

Lesezeit: 7 Minuten

Benutzeravatar von user981178
Benutzer981178

Gibt es eine Möglichkeit, die Einträge in zwei Formularfeldern mithilfe von HTML abzugleichen? Oder muss das immer noch mit JavaScript gemacht werden? Wenn Sie beispielsweise zwei Passwortfelder haben und sicherstellen möchten, dass ein Benutzer in jedes Feld dieselben Daten eingegeben hat, gibt es einige Attribute oder andere Codierungen, die vorgenommen werden können, um dies zu erreichen?

  • Das Problem, auf das ich beim Regex-Musterabgleich in HTML5 gestoßen bin, ist, dass jedes Sonderzeichen abgeglichen wird: Passwort: Cat$ Passwort bestätigen: Cat@ wird eine Übereinstimmung im Feld Bestätigung erzeugen. Obwohl ich mein Validierungsskript habe, das die Übermittlung nicht zulässt, bietet dies eine falsche Anzeige für den Benutzer.

    – Trekkabout

    30. Mai 2017 um 14:57 Uhr

  • Die Antwort auf diese Frage lautet: Nein, mit HTML ist dies nicht möglich. Und selbst wenn es einen Weg gäbe, muss immer eine serverseitige Validierung erfolgen.

    – Mike32

    20. Februar um 17:12 Uhr


Benutzeravatar von Faisal
Faisal

Nicht gerade mit HTML-Validierung, aber ein wenig JavaScript kann das Problem lösen, folgen Sie dem Beispiel unten:

function check() {
    var input = document.getElementById('password_confirm');
    if (input.value != document.getElementById('password').value) {
        input.setCustomValidity('Password Must be Matching.');
    } else {
        // input is valid -- reset the error message
        input.setCustomValidity('');
    }
}
<p>
  <label for="password">Password:</label>
  <input name="password" required="required" type="password" id="password" oninput="check()"/>
</p>

<p>
  <label for="password_confirm">Confirm Password:</label>
  <input name="password_confirm" required="required" type="password" id="password_confirm" oninput="check()"/>
</p>

<input type="submit" />

  • Würde bei diesem Code ein Problem auftreten, wenn wir: 1. beide Passwörter gleich eingeben und dann 2. zum ersten Passwortfeld zurückkehren und den Wert dort ändern?

    – Mladen B.

    25. März 2018 um 9:35 Uhr

  • Ja, und wenn Sie zum Beispiel „abc“ in das erste Feld und „bcd“ in das zweite Feld eingeben und dann das „abc“ im ersten Feld in „bcd“ ändern, passen die Passwörter, aber Sie erhalten trotzdem die ungültige Eingabenachricht.

    – Roel Koops

    18. September 2018 um 20:46 Uhr


  • Die in den obigen Kommentaren erwähnten Probleme können wie folgt angegangen werden: 1) Hinzufügen oninput="check(this)" zum ersten Passwortfeld und 2) ändern input.value in der Funktion zu document.getElementById('password_confirm').value. So wird es if (document.getElementById('password_confirm').value != document.getElementById('password').value)

    – Höhle Johnson

    20. Dezember 2018 um 2:23 Uhr


Benutzeravatar von Francisco Costa
Francisco Costa

Sie können mit regulären Ausdrücken Eingabemuster (überprüfen Browser-Kompatibilität)

<input id="password" name="password" type="password" pattern="^\S{6,}$" onchange="this.setCustomValidity(this.validity.patternMismatch ? 'Must have at least 6 characters' : ''); if(this.checkValidity()) form.password_two.pattern = this.value;" placeholder="Password" required>

<input id="password_two" name="password_two" type="password" pattern="^\S{6,}$" onchange="this.setCustomValidity(this.validity.patternMismatch ? 'Please enter the same Password as above' : '');" placeholder="Verify Password" required>

  • Obwohl dies funktioniert, ist es aus zwei Gründen immer noch eine schlechte Antwort: Sie behaupten, dies sei eine reine HTML-Lösung, was nicht der Fall ist, und Sie erklären nicht, wie es funktioniert.

    – wvz

    18. Oktober 2014 um 12:08 Uhr


  • Das stimmt wahrscheinlich. Doch obwohl es eine schlechte Antwort ist, ist es eine nette Lösung. Wenn ein Wert in das erste Feld eingegeben wird, wird die für diese Eingabe definierte Kennwortmusterprüfung durchgeführt. Wenn es nicht zu Ihrem PW-Muster passt, wird eine Meldung angezeigt. Wenn es mit Ihrem erforderlichen Muster übereinstimmt, ändert es das erforderliche Muster für das zweite pw-Feld in den Wert, den der Benutzer eingegeben hat. Wenn der Benutzer etwas in das zweite Feld einträgt, muss es der Wert aus dem ersten Feld sein oder die Fehlermeldung wird angezeigt. Sehr schön. Ich mache mir Gedanken darüber, ob dies irgendwelche Sicherheitsprobleme aufwirft. Ich glaube nicht, dass es geht…

    – Brian Laie

    30. September 2015 um 5:13 Uhr

  • Der Trick hier ist “form.password_two.pattern = this.value”, das mit Sonderzeichen bricht, die in regulären Ausdrücken eine besondere Bedeutung haben

    – dequis

    14. März 2016 um 20:10 Uhr

  • @wvdz hat nie gesagt, dass es sich um reines HTML handelt, aber der Übersichtlichkeit halber den Link zur Browserkompatibilität hinzugefügt

    – Francisco Costa

    14. Juli 2016 um 17:22 Uhr

  • @FranciscoToméCosta Die Frage fragt nach einer Nur-HTML-Lösung, daher behauptet jede Antwort implizit, nur HTML zu sein, sofern nicht anders angegeben.

    – wvz

    15. Juli 2016 um 8:44 Uhr


Benutzeravatar von wvdz
wvdz

Eine einfache Lösung mit minimalem Javascript ist die Verwendung des HTML-Attributmusters (unterstützt von am meisten moderne Browser). Dies funktioniert, indem das Muster des zweiten Felds auf den Wert des ersten Felds gesetzt wird.

Leider müssen Sie auch die Regex maskieren, für die es keine Standardfunktion gibt.

<form>
    <input type="text" oninput="form.confirm.pattern = escapeRegExp(this.value)">
    <input name="confirm" pattern="" title="Fields must match" required>
</form>
<script>
    function escapeRegExp(str) {
      return str.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g, "\\$&");
    }
</script>

  • Danke dafür; Ich konnte die Funktion direkt in den Handler einfügen, musste aber eine ID auf die Bestätigung setzen: <input type="password" name="password" oninput="document.getElementById('confirm').pattern = this.value.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g, '\\$&')" required><input type="password" id="confirm" name="confirm" pattern="" title="Fields must match" required> Nicht lesbar wie bei Ihnen, vermeidet jedoch das separate Skript / die separate Funktion.

    – David Braun

    26. Oktober 2016 um 0:42 Uhr


Benutzeravatar von ptrdo
ptrdo

JavaScript ist erforderlich, aber die Codemenge kann durch die Verwendung eines Vermittlers auf ein Minimum beschränkt werden <output> Element und ein oninput form handler, um den Vergleich durchzuführen (Muster und Validierung könnten diese Lösung erweitern, werden hier aber der Einfachheit halber nicht gezeigt):

<form oninput="result.value=!!p2.value&&(p1.value==p2.value)?'Match!':'Nope!'">
  <input type="password" name="p1" value="" required />
  <input type="password" name="p2" value="" required />
  <output name="result"></output>
</form>

Benutzeravatar von EfisioBova
EfisioBova

Nicht nur HTML, sondern ein bisschen JavaScript

HTML

<form class="pure-form">
    <fieldset>
        <legend>Confirm password with HTML5</legend>

        <input type="password" placeholder="Password" id="password" required>
        <input type="password" placeholder="Confirm Password" id="confirm_password" required>

        <button type="submit" class="pure-button pure-button-primary">Confirm</button>
    </fieldset>
</form>

JavaScript

var password = document.getElementById("password")
      , confirm_password = document.getElementById("confirm_password");
    
function validatePassword(){
    confirm_password.setCustomValidity( password.value != 
    confirm_password.value ? "Passwords Don't Match" : '');
}

password.onchange = validatePassword;
confirm_password.onkeyup = validatePassword;

CodePen-Demo

Benutzeravatar von TylerH
TylerH

Wie in anderen Antworten erwähnt wurde, gibt es dafür keine reine HTML-Methode.

Wenn Sie bereits verwenden JQuerydann sollte dies tun, was Sie brauchen:

$(document).ready(function() {
  $('#ourForm').submit(function(e){
      var form = this;
      e.preventDefault();
      // Check Passwords are the same
      if( $('#pass1').val()==$('#pass2').val() ) {
          // Submit Form
          alert('Passwords Match, submitting form');
          form.submit();
      } else {
          // Complain bitterly
          alert('Password Mismatch');
          return false;
      }
  });
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<form id="ourForm">
    <input type="password" name="password" id="pass1" placeholder="Password" required>
    <input type="password" name="password" id="pass2" placeholder="Repeat Password" required>
    <input type="submit" value="Go">
</form>

Benutzeravatar von Akif Kara
Akif Kara

      <div className="form-group">
        <label htmlFor="password">Password</label>
        <input
          value={password}
          onChange={(e) => { setPassword(e.target.value) }}
          type="password" id='password' name="password" required minLength={3} maxLength={255} />
      </div>
      <div className="form-group">
        <label htmlFor="confirmPassword">Confirm Password</label>
        <input
          title="Passwords should be match"
          pattern={`${password}`}
          value={confirmPassword}
          onChange={(e) => { setConfirmPassword(e.target.value) }}
          type="password" id='confirmPassword' name="confirmPassword" required minLength={3} maxLength={255} />
      </div>

1446090cookie-checkKönnen Sie verlangen, dass zwei Formularfelder mit HTML übereinstimmen?

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

Privacy policy