首页 > 解决方案 > Java Script Function 对于特定的正则表达式运行良好,但在另一个正则表达式中无法正常运行

问题描述

我有一个 JavaScript 函数,它可以很好地用作 4 位空格分隔符。

这是我用这段代码测试的正则表达式:http: //jsfiddle.net/davidThomas/K4WXc/2/

LB\d{2}[ ]\d{4}[ ]\d{4}[ ]\d{4}[ ]\d{4}[ ]\d{4}[ ]\d{4}

但是,当我将新的正则表达式用于 iban 时,它不像前一个那样工作。

function space(el, after) {
  after = after || 4;
  var v = el.value.replace(/[^\dA-Z]/, ''),
    reg = new RegExp(".{" + after + "}", "g")
  el.value = v.replace(reg, function(a, b, c) {
    return a + ' ';
  });
}

$(document).ready(function() {
  var el = document.getElementById('iban');
  el.addEventListener('keyup', function() {
    space(this, 4);
  });
})
// my assigned var is like 
//  var v = el.value.replace(/LB\d{2}[ ]\d{4}[ ]\d{4}[ ]\d{4}[ ]\d{4}[ ]\d{4} 
// [ ]\d{4}/g, ''),
 
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<label for="iban">iban</label>
<input id="iban" type="text" name="iban" />

标签: javascriptregex

解决方案


这是以前的正则表达式:

el.value.replace(/[^\dA-Z]/, '')

这是你的想法:

el.value.replace(/LB\d{2}[ ]\d{4}[ ]\d{4}[ ]\d{4}[ ]\d{4}[ ]\d{4}[ ]\d{4}/g, '')

它不起作用,因为您无法理解代码试图做什么。该原始行有一个目的:删除所有不是数字或大写字母的字符。所以,aA!@1b2345就变成A12345了唯一。下一部分reg = new RegExp(".{" + after + "}", "g")用于v.replace在一定数量的字符后添加空格(如 中所指定after)。这意味着A12345变成A123 45,并被写回元素。

你可以试试这个:http: //jsfiddle.net/aoLrb41p/


推荐阅读