/ / RegEx na overenie a formátovanie čísla zväzku - javascript, jquery, regex

RegEx na overenie a formátovanie čísla dlhopisu - javascript, jquery, regex

Mám nasledujúci String vzor, ​​v ktorom vstup by mal byť formátovaný ako je uvedené nižšie.

01-XXX-000001-01-0001 or 01-XXX-000001-01-001

vstup.

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

užívateľ môže zadať normálny reťazec bez pomlčky alebo pomlčky

Prípad 1: ak užívateľ zadá 01XXX000001010001 potom výsledok by mal byť 01-XXX-000001-01-0001

Prípad 2: ak užívateľský vstup 01-XXX-000001-01-0001 nevyžaduje žiadnu zmenu.

regex bude pre mňa viac nápomocný.

Skúšal som to nižšie, ale funguje to len pre čísla.

var n = "345453353435443435";
document.write(n.replace(/(d{2})(d{3})(d{6})(d{3})(d{4})/, "$1-$2-$3-$4-$5"));

odpovede:

1 pre odpoveď č. 1

Niečo podobné by malo fungovať:

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;

skúšky

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