首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将文本格式化为4个字符(ABCD-EFGH-IJKL),但允许编辑。

将文本格式化为4个字符(ABCD-EFGH-IJKL),但允许编辑。
EN

Stack Overflow用户
提问于 2022-02-11 07:48:29
回答 2查看 83关注 0票数 0

我试图用jquery在输入中格式化并允许编辑格式化字符串,但无法正确地完成格式化字符串的编辑。实际上,当用户在输入中输入代码时出错并想要更正时,它会将用户跳到链的末尾,因为当用户删除一个字符时,它会强制格式化它。我如何编辑它,让用户纠正他的错误,但仍然格式化的链?

什么用户类型: 8F489T4R8T5O7S8E

用户看到什么: 8F48-9T4R-8T5O-7S8E

但是当用户想要将O更正为0时,它会产生类似于这个8F48-9T4R-8T57-S8E0的结果,因为它将强制立即重新格式化字符串并将0放在链的末尾。

代码语言:javascript
复制
    $("input[name=login-access-token]").keyup(function(event){
        var input = $(this).val();
        input = input.replace(/[\W\s\._\-]+/g, '');
        var split = 4;
        var chunk = [];
         
        for (var i = 0, len = input.length; i < len; i += split) {
            split = 4;
            chunk.push( input.substr( i, split ) );
        }
        $(this).val(function() {
            var out = chunk.join("-").toUpperCase();
            
            if(out.length == 4 && event.keyCode != 8){
                    out += "-";
            }
            
            if(out.length == 9 && event.keyCode != 8 ){
                    out += "-";
            }
            
            return out;
        });
        
    });
代码语言:javascript
复制
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>

<input type="text" name="login-access-token" placeholder="Code" />

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2022-02-11 08:30:12

添加了新的if条件。

代码语言:javascript
复制
    $("input[name=login-access-token]").keyup(function(event){
     if (event.keyCode != 8 && event.keyCode != 46) { //New conditions added
        var input = $(this).val();
        input = input.replace(/[\W\s\._\-]+/g, '');
        var split = 4;
        var chunk = [];
         
        for (var i = 0, len = input.length; i < len; i += split) {
            split = 4;
            chunk.push( input.substr( i, split ) );
        }
        $(this).val(function() {
            var out = chunk.join("-").toUpperCase();
            
            if(out.length == 4 && event.keyCode != 8){
                    out += "-";
            }
            
            if(out.length == 9 && event.keyCode != 8 ){
                    out += "-";
            }
            
            return out;
        });
        }
    });
票数 0
EN

Stack Overflow用户

发布于 2022-02-11 08:43:00

我认为这是插件jquery-输入掩码的一个很好的用例。

看看文档,有很多选择。

如果将它与CSS属性text-transform: uppercase组合起来,那么您可以在一个一行javascript (加上可行的复制/粘贴和禁用非alpha字符)中获得所需的大多数行为。

代码语言:javascript
复制
$("input[name=login-access-token]").inputmask()
代码语言:javascript
复制
input {
  font-family: monospace;
  text-transform: uppercase
}
代码语言:javascript
复制
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
<script src="https://s3-us-west-2.amazonaws.com/s.cdpn.io/3/jquery.inputmask.bundle.js"></script>

<input type="text" name="login-access-token" placeholder="Code" data-inputmask="'mask': '****-****-****-****'"/>

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71076674

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档