您是否需要两个表单字段才能与HTML5匹配?

use*_*178 90 forms html5

有没有办法要求两个表单字段中的条目使用HTML5匹配?或者这仍然需要使用javascript完成?例如,如果您有两个密码字段并且想要确保用户在每个字段中输入了相同的数据,是否有一些属性或其他编码可以实现此目的?

Fai*_*sal 82

不完全是HTML5验证,但一点点JavaScript可以解决问题,请按照下面的示例:

<p>Password:</p>
<input name="password" required="required" type="password" id="password" />
<p>Confirm Password:</p>
<input name="password_confirm" required="required" type="password" id="password_confirm" oninput="check(this)" />
<script language='javascript' type='text/javascript'>
    function check(input) {
        if (input.value != document.getElementById('password').value) {
            input.setCustomValidity('Password Must be Matching.');
        } else {
            // input is valid -- reset the error message
            input.setCustomValidity('');
        }
    }
</script>
<br /><br />
<input type="submit" />
Run Code Online (Sandbox Code Playgroud)

  • 上述评论中提到的问题可以通过以下方式解决:1) 将 `oninput="check(this)"` 添加到第一个密码字段,2) 将函数中的 `input.value` 更改为 `document.getElementById(')密码_确认').value`。所以它变成 `if (document.getElementById('password_confirm').value != document.getElementById('password').value)` (2认同)

Fra*_*sta 28

您可以使用正则表达式输入模式(检查浏览器兼容性)

<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>
Run Code Online (Sandbox Code Playgroud)

  • 虽然这有效,但它仍然是一个糟糕的答案有两个原因:你声称这是一个纯HTML解决方案,它不是,你不解释它是如何工作的. (43认同)
  • 这可能是真的.虽然这是一个糟糕的答案,但这是一个很好的解决方案.在第一个字段中输入值时,它会为该输入定义密码模式检查.如果不适合您的pw模式,它会显示一条消息.如果它符合您所需的模式,则会将第二个pw字段所需的模式更改为用户输入的值.如果用户在第二个字段中输入内容,则必须是第一个字段中的值,否则将显示错误消息.挺棒的.我正在考虑这是否会带来任何安全问题.我不认为它...... (8认同)
  • 这里的诀窍是"form.password_two.pattern = this.value",这将打破在regexp中具有特殊含义的特殊字符 (5认同)
  • @FranciscoToméCosta 该问题要求仅使用 html 解决方案,因此任何答案都隐式声称仅使用 html,除非另有说明。 (2认同)

wvd*_*vdz 13

使用最小javascript的简单解决方案是使用html属性模式(大多数现代浏览器都支持).这通过将第二个字段的模式设置为第一个字段的值来工作.

不幸的是,你还需要逃避正则表达式,因为没有标准函数存在.

<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>
Run Code Online (Sandbox Code Playgroud)


ptr*_*rdo 6

将需要 JavaScript,但通过使用中间<output>元素和oninput表单处理程序来执行比较,可以将代码量保持在最低限度(模式和验证可以增强此解决方案,但为了简单起见未在此处显示):

<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>
Run Code Online (Sandbox Code Playgroud)


小智 6

不仅是 HTML,还有一些 JavaScript

超文本标记语言

<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>
Run Code Online (Sandbox Code Playgroud)

JavaScript

<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>
Run Code Online (Sandbox Code Playgroud)

CodePen 演示