我有以下字符串模式,其中输入的格式应如下所示。

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

最佳答案

这样的事情应该起作用:

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

10-06 14:45