【问题标题】:How can I request the password to be numbers only to create new users?我怎样才能要求密码只是数字才能创建新用户?
【发布时间】:2013-05-24 06:58:10
【问题描述】:

我怎样才能要求密码为数字才能创建新用户?

这可能是一个愚蠢的问题,但我没有找到如何让密码仅为数字 [0-9]! 另一个相关问题:我如何要求密码仅为数字 [1-9]?

我试过了,但是没用!

<input type="password" name="password" maxlength="30" type="number" value="<?php echo htmlentities($password); ?>" />

【问题讨论】:

  • Type=number 只适用于新一代浏览器
  • 为什么密码只能是数字?让他们输入任何内容有什么问题?
  • @Jack:我有一个想法,我想证明它:)
  • 密码不应在没有充分理由的情况下以任何方式受到限制,除了最小长度。所以我也会对你的想法感兴趣。
  • 你们都说得对,等我完成后让我告诉你这个想法,向我道歉:)

标签: php html login passwords number-formatting


【解决方案1】:

你可以像这样使用正则表达式

$pass = preg_replace( '/[^0-9]/', '', $password );

这只会取 0 到 9 之间的数值。对于 1 到 9,只需更改值。 还有一个用于 php 的 is_numericintval 函数

if(is_numeric($pass)){
$password = $pass;
} else {
//Error message
}

【讨论】:

  • 我对这个很感兴趣,我会尝试,但我会更好地使用is_int,对吗?
  • 正则表达式可能是一种替代方案,但这是您的选择。选择你觉得舒服的地方。
【解决方案2】:

使用 JavaScript 捕获按键 (keyup) 并丢弃不是数字的按键。基本上,您将输入到input 中的值,删除最后一个字符,然后将其放回原处。使用 jQuery,这实际上非常简单。

您可以使用服务器端检查,然后通知您的用户他们需要重新开始......但是如果您曾经遇到过这种情况,您就会知道糟糕的 UI 会造成什么后果。 JavaScipt 是客户端是有原因的。

【讨论】:

    【解决方案3】:

    应该是服务端检查,否则很容易被前端操控。

    您可以使用正则表达式来操作输入或简单地检查它:

    if (is_int($_POST['password'])) {
      // continue
    }
    else {
      // break
    }
    

    is_intdocs:http://php.net/manual/en/function.is-int.php也有相关功能

    【讨论】:

      【解决方案4】:
      function checkNumKey(evt)
        {
           var charCode = (evt.which) ? evt.which : event.keyCode
           if (charCode != 46 && charCode > 31 && (charCode < 48 || charCode > 57))
              return false;
      
           return true;
        }
      

      在脚本标签中包含这个函数。 并根据需要在 textBox 上调用它

      例如

      <input type="text" onkeypress="javascript:return checkNumKey(event);" />
      

      【讨论】:

      • 这不会阻止将文本粘贴到字段中,不是吗?我建议在任何按键.replace(/[^0-9]/, '') 后检查整个字段是否符合正则表达式
      • 如果你这样做......你也应该使用服务器端检查......但这将有助于向启用 JS 的用户提供反馈。
      【解决方案5】:

      您的代码中有 2 个type 属性,我认为这不起作用。让type 成为password

      在 javascript 或 php 中验证用户输入,如果输入是数字,则仅保存到 darabase。

      在javascript中使用函数isNaN

      参考:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/isNaN

      在php中使用is_numeric

      参考:http://php.net/manual/en/function.is-numeric.php

      【讨论】:

      • 您不应将文档链接到 w3schools。详情请见here。您可能希望改为链接到 Mozilla Developer Network
      • 数据应该在客户端服务器端进行验证,而后者通常更重要。客户端检查太容易绕过了。
      【解决方案6】:

      除了服务器端检查(必须)和客户端 JavaScript 检查(有利于可用性)之外,您还可以使用 HTML5 pattern 属性。一些浏览器支持它,并且在它们中,即使禁用 JavaScript,它也提供客户端检查。示例:

      <input type="password" name="password" maxlength="30" pattern="\d+">
      

      MDN info on input 在这方面已经过时了。根据 HTML5 CR,pattern 属性也允许用于 [input type=password][2],现代浏览器(包括 IE 10)也支持这种方式。

      【讨论】:

      • 谢天谢地.. 这已经足够了,但是只有 [1-9] 的数字呢?
      • 我在 developer.mozilla.org 中进行了搜索,但没有找到任何关于 pattern="\d+" ..!?我怎样才能找到有关它的更多信息?
      • 要只允许从 1 到 9 的数字,请使用 pattern="[1-9]+"。该值的语法与 JavaScript 正则表达式中的语法相同,只是需要匹配整个字符串;这大致对应于模式开头隐含的^ 和模式结尾隐含的$
      • 我不明白你的评论的其余部分,但pattern="[1-9]+" 对我来说已经足够了.. 它运作良好:)
      【解决方案7】:

      如果您正在寻找客户端验证,您可以使用 jQuery

      $(document).ready(function(){
          $("#name_ajax").change(function(){
      
              if($.isNumeric($("#name_ajax").val())){
              return;
              }
              else {
              alert ('not allowed');
              }
          }
      })
      

      其中name_ajax 是文本字段的ID。

      不要忘记包含 jquery 库

      【讨论】:

        猜你喜欢
        • 2019-10-04
        • 1970-01-01
        • 2018-03-02
        • 2021-10-30
        • 2022-11-04
        • 2011-04-27
        • 2018-09-21
        • 2017-08-11
        • 1970-01-01
        相关资源
        最近更新 更多