【问题标题】:Add comma to every eight digits每八位加逗号
【发布时间】:2015-06-22 23:58:46
【问题描述】:

给定以下输入:

123456781234567812345678

我正在努力完成以下工作:

12345678,12345678,12345678

目前完成这项工作的内容如下:

parts = parts.replace(/\B(?=(\d{8})+(?!\d))/g, ",");

我遇到的问题是正则表达式从右到左读取。我创建了一个JSFIDDLE 来显示这个问题。我得到的结果是这样的。

123,45678910,12345678

最后,当我使用箭头键四处移动时,它会让我回到输入的末尾。

REGEX101

【问题讨论】:

  • 您的输入和预期输出是什么?
  • 有点不清楚你真正想要发生什么。你想让它看起来像 12345678,91012345,678 吗?
  • 我添加了输入,很抱歉不清楚。

标签: javascript jquery regex


【解决方案1】:

您可以使用以下基于负前瞻的正则表达式。

alert('123456781234567812345678122'.replace(/(\d{8})(?!$)/g, "$1,"))
alert('123456781234567812345678'.replace(/(\d{8})(?!$)/g, "$1,"))

DEMO

(\d{8}) 捕获每 8 个数字字符,但不是最后一个。 (?!$) 否定前瞻,它断言匹配后不会出现行尾锚。因此,通过将匹配的字符替换为第一组中的当前字符加上 , 将为您提供所需的输出。

【讨论】:

    【解决方案2】:

    使用@Avinash regexpmy answer from this question,您可以使用该代码实现您想要的:

        $('.singleSpace').keyup(function() {
            var foo = this.value.replace(/\D/g, '').replace(/(\d{8})(?!$)/g, "$1,")
            
            var carretPos = doGetCaretPosition(this)
            
            carretPos += foo.length - this.value.length
            
            this.value = foo;
            
            setSelectionRange(this, carretPos, carretPos)
        });
        
        
        //Code taken from
        // https://stackoverflow.com/questions/17858174/set-cursor-to-specific-position-on-specific-line-in-a-textarea
        function setSelectionRange(input, selectionStart, selectionEnd) {
            if (input.setSelectionRange) {
                input.focus();
                input.setSelectionRange(selectionStart, selectionEnd);
            }
            else if (input.createTextRange) {
                var range = input.createTextRange();
                range.collapse(true);
                range.moveEnd('character', selectionEnd);
                range.moveStart('character', selectionStart);
                range.select();
            }
        }
        
        //Code taken from
        // https://stackoverflow.com/questions/2897155/get-cursor-position-in-characters-within-a-text-input-field
        function doGetCaretPosition (oField) {
            
            // Initialize
            var iCaretPos = 0;
            
            // IE Support
            if (document.selection) {
                
                // Set focus on the element
                oField.focus ();
                
                // To get cursor position, get empty selection range
                var oSel = document.selection.createRange ();
                
                // Move selection start to 0 position
                oSel.moveStart ('character', -oField.value.length);
                
                // The caret position is selection length
                iCaretPos = oSel.text.length;
            }
            
            // Firefox support
            else if (oField.selectionStart || oField.selectionStart == '0')
                iCaretPos = oField.selectionStart;
            
            // Return results
            return (iCaretPos);
        }
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
    
    <input type="text" class="singleSpace" />

    基本上,使用正则表达式进行更改。在运行正则表达式添加逗号之前,请务必删除所有非数字字符。

    然后,您需要使用代码 sn-p 将插入符号放置在替换值时所在的位置。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-12-31
      • 1970-01-01
      • 1970-01-01
      • 2019-04-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多