【问题标题】:Validate user input with whitespace使用空格验证用户输入
【发布时间】:2020-07-19 11:51:14
【问题描述】:

如何实时格式化用户输入?比如用户在输入框输入A9364470240ZGS001,在输入框使用JavaScript实时格式化为:A 936 447 02 40 ZGS 001?

<div class="childDumpFile">
     <label for="ds">Dataset</label>
     <input type="text" class="form-control" id="ds" name="ds" value="{{Request::get('ds') ?? ''}}">
</div>

【问题讨论】:

  • 您的意思是按照用户输入的格式设置输入值吗?
  • 是的,用户输入A9364470240ZGS001,我需要将实时字符串格式化为A 936 447 02 40 ZGS 001
  • 你的格式有什么逻辑背景吗?我想知道用户是否必须一个一个地写入这个值,或者他们可以粘贴它?我准备了一个代码来提供实时格式,但是用户必须一个一个地写出值。
  • 不,我没有写任何关于格式化的逻辑。但是如果很难实时实现这个逻辑,那么它可能没有实时。我只需要将这个字符串A9364470240ZGS001 格式化为A 936 447 02 40 ZGS 001
  • 您可以通过here查看。但正如我在用户必须一一写字符之前感到难过的那样。

标签: javascript html laravel validation input-mask


【解决方案1】:

我找到了真正的答案。如果您愿意,这些期望被命名为“输入掩码”。您必须使用 3. 方库。其中一些在以下网站中列出:

Libraries 1 Libraries 2

我为您的问题选择了Cleave.js。这是演示:

<script src="https://nosir.github.io/cleave.js/dist/cleave.min.js"></script>
<script src="https://nosir.github.io/cleave.js/dist/cleave-phone.i18n.js"></script>
<script>
    function loadFunction() {
        // custom
        var cleaveCustom = new Cleave('.input-custom', {
            blocks: [1, 3, 3, 2, 2, 3, 3],
            delimiter: ' ',
        });
    }
</script>

<body onload="loadFunction()">
    A 936 447 02 40 ZGS 001
    <div class="container">
        <input class="input-custom" placeholder="Custom delimiter & blocks" />
    </div>
</body>

【讨论】:

    【解决方案2】:

    如果我们假设用户必须一个一个地写字符。这将起作用。

    <body>
        <input type="text" class="form-control" id="ds" name="ds" onkeypress="keyPress()" maxlength="23">
    </body>
    <script>
        function keyPress() {
            var field = document.getElementById("ds");
            var text = field.value;
            if(text.length == 1 || text.length == 5 
            || text.length == 9 || text.length == 12
            || text.length == 15 || text.length == 19 ) {
                var newText = text + " ";
                field.value = newText;
            }
        }
    </script>
    

    【讨论】:

      【解决方案3】:

      这是一个小例子。

      <div class="childDumpFile">
           <label for="ds">Dataset</label>
           <input type="text" class="form-control" id="ds" name="ds">
      </div>
      
      <div class="test_ds"></div>
      

      带有 jquery 的 JS。

      $("#ds").change(function(){
          var ds_value = $("#ds").val();
      
      var temp = ds_value;
      temp = temp.substring(0,1) + " " + temp.substring(1, 4) + " " + temp.substring(4, 7) + " " + temp.substring(7, 9) + " " + temp.substring(9, 11) + " " + temp.substring(11, 14) + " " + temp.substring(14, 17);
      
        $("#ds").val(temp);
        $(".test_ds").html(temp);
      });
      

      这是一个演示 - https://jsfiddle.net/Kistlak/7bkdtev8

      【讨论】:

      • 我检查了你的演示。我必须离开盒子才能开始验证。他要求实时。你的答案就像onChange() event
      【解决方案4】:

      首先,您需要在输入中添加 onchange="getTimeNow()" oninput="getTimeNow()"

      <input type="text" class="form-control" id="ds" name="ds" value="{{Request::get('ds') ?? ''}}" onchange="getTimeNow()" oninput="getTimeNow()">
      

      最后,你得到事件输入文本

      <script>function getTimeNow(){console.log(new Date())}</script>
      

      【讨论】:

      • 我需要实时格式化字符串。这不是我要求的。
      猜你喜欢
      • 2021-01-14
      • 2014-05-26
      • 2016-02-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-09-11
      相关资源
      最近更新 更多