javascript - 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" />
解决方案
这是以前的正则表达式:
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/
推荐阅读
- ruby-on-rails - 如何在 Rails Admin 的显示和列表操作中使用关联集合的范围
- reactjs - React 测试库设置 window=undefined
- c++ - Crossworks 字符串转换
- docker - 通过 TCP 将服务连接到 Docker 容器
- node.js - 中断并继续 Node.js readline async for 循环
- laravel - 用于 laravel 的 npm 安装和 npm dev 无法正常工作
- javascript - 测试数组是否包含特定的子字符串
- kubernetes - 无内存限制的 Kubernetes pod 中 .net GC 的性能
- sql - 在 ASP.NET Core 中使用 Azure SQL 弹性数据库客户端时,是否可以使用分片信息注入 DbContext?
- docker - docker-compose 为服务添加主机名