RegEx用于验证和格式化债券编号

时间:2017-07-11 11:03:59

标签: javascript jquery regex

我有以下字符串模式,其中输入应该格式化如下。

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"));

1 个答案:

答案 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');