我有以下字符串模式,其中输入应该格式化如下。
01-XXX-000001-01-0001 or 01-XXX-000001-01-001
输入的描述。
01: any two digit Number
xxx: any three characters
000001: Any 6 digit number
01: Any two digit number
0001: any number up to 4 digits
用户可以输入普通字符串,不带连字符或连字符
案例1:如果用户输入01XXX000001010001 那么结果应为01-XXX-000001-01-0001
案例2:如果用户输入01-XXX-000001-01-0001则无需更改。
正则表达式对我来说会更有帮助。
我在下面尝试了这个,但它仅适用于数字。
var n = "345453353435443435";
document.write(n.replace(/(\d{2})(\d{3})(\d{6})(\d{3})(\d{4})/, "$1-$2-$3-$4-$5"));
答案 0 :(得分:1)
这样的事情应该有效:
const regex = /^(\d{2})-?([a-zA-Z]{3})-?(\d{6})-?(\d{2})-?(\d{1,4})$/;
const reformat = str =>
regex.test(str) ? str.replace(regex, '$1-$2-$3-$4-$5') : null;
const assert = require('assert');
assert.equal(reformat('invalid-format'), null);
assert.equal(reformat('01-XXX-000001-01-0001'), '01-XXX-000001-01-0001');
assert.equal(reformat('01XXX000001010001'), '01-XXX-000001-01-0001');
assert.equal(reformat('01XXX000001011'), '01-XXX-000001-01-1');
assert.equal(reformat('43-XPR-000643-01-0001'), '43-XPR-000643-01-0001');
assert.equal(reformat('43XPR000643010001'), '43-XPR-000643-01-0001');