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?
Können Sie verlangen, dass zwei Formularfelder mit HTML übereinstimmen?
Benutzer981178
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) änderninput.value
in der Funktion zudocument.getElementById('password_confirm').value
. So wird esif (document.getElementById('password_confirm').value != document.getElementById('password').value)
– Höhle Johnson
20. Dezember 2018 um 2:23 Uhr
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
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
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>
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;
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>
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>
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