Ich habe das folgende String-Muster, in dem die Eingabe wie folgt formatiert werden sollte.
01-XXX-000001-01-0001 or 01-XXX-000001-01-001
Eingabe der Eingabe.
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
Benutzer können normale Zeichenfolge ohne Bindestrich oder mit Bindestrich eingeben
Fall 1 : Wenn der Benutzer 01XXX000001010001 eingibt dann Ergebnis sollte 01-XXX-000001-01-0001 sein
Fall 2: Wenn Benutzereingabe 01-XXX-000001-01-0001, dann keine Änderung erforderlich.
Regex wird mir mehr helfen.
Ich habe dies unten versucht, aber es funktioniert nur für Zahlen.
var n = "345453353435443435";
document.write(n.replace(/(d{2})(d{3})(d{6})(d{3})(d{4})/, "$1-$2-$3-$4-$5"));
Antworten:
1 für die Antwort № 1So etwas sollte funktionieren:
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;
Tests
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");