/ / RegEx per convalidare e formattare il numero di legame - javascript, jquery, regex

RegEx per convalidare e formattare il numero di legame - javascript, jquery, regex

Ho il seguente modello di stringa in cui l'input dovrebbe essere formattato come di seguito.

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

desc di input.

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

l'utente può inserire una stringa normale senza trattino o con trattino

Caso 1 : se l'utente immette 01XXX000001010001 poi il risultato dovrebbe essere 01-XXX-000001-01-0001

Caso 2: se l'utente immette 01-XXX-000001-01-0001, non è richiesta alcuna modifica.

regex sarà più pieno di aiuto per me.

Ho provato questo sotto ma funziona solo per i numeri.

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

risposte:

1 per risposta № 1

Qualcosa di simile dovrebbe funzionare:

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;

test

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