【问题标题】:add character inside string using on keyup regex javascript使用keyup regex javascript在字符串中添加字符
【发布时间】:2021-12-30 06:57:28
【问题描述】:

我使用键上的事件创建函数,使用正则表达式将“/”放入输入用户的值中,但仍然存在错误,有人可以帮助我吗?

$('#validUntil').on('keyup', function(e){

                    $(this).val(function(index, value) {
                        return value
                        // Add "/" separators:
                        .replace(/\B(?=(\d{2})+(?!\d))/g, "/")
                    });
});

例如,如果我输入 5121,则结果必须是 51/21。 问题是结果不匹配,显示的结果是:5/1/21

【问题讨论】:

  • 你能解释一下这个问题吗?
  • 对不起,我更新了我的问题
  • 你能用键盘打字吗?

标签: javascript jquery


【解决方案1】:

欢迎来到 Stack Overflow。请考虑以下内容。

$(function() {
  $('#validUntil').on('keyup', function(e) {
    var val = $(this).val();
    if (val.length > 3) {
      $(this).val(val.replace(/\B(?=(\d{2})+(?!\d))/g, "/"));
    }
    return true;
  });
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<input type="text" id="validUntil" />

我怀疑主要问题是对每个 keyup 事件的值进行评估。

添加条件以确保适当的长度将有助于确保正则表达式在需要时正常工作。

现在如果用户输入512111,你会遇到类似的问题。因此,如果检测到/,可能会将其删除,然后应用正则表达式替换。

【讨论】:

  • 是的,兄弟,谢谢你的回答。
【解决方案2】:

您在输入的最后两个数字之前添加一个斜杠,每次其值更新时。

所以当你打字时:


5 => 5

5 + 1 => 51 => 51

51 + 2 => 512 => 5/12

5/12 + 1 => 5/121 => 5/1/21


插入斜线时,一定要去掉之前插入的斜线:

return value.replaceAll('/', '')
            .replace(/\B(?=(\d{2})+(?!\d))/g, "/")

【讨论】:

  • 非常感谢兄弟,replaceAll "/" 效果很好。
猜你喜欢
  • 2011-08-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-04-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多