Mam formularz w Angularze i w nim textarea, w którym mogą być numery, cyfry i jeszcze parę innych znaków. Waliduję to z wykorzystaniem wbudowanych angularowych walidatorów i tam mam regexa. I tutaj pytanie. Czy da się jakoś wyciągnąć info, który znak z textarea nie pasuje do tego regexa? Chciałbym taką informację wyświetlić użytkownikowi.
0
0
Przypuszczam, że nie jest to możliwe dla dowolnie obranego wyrażenia regularnego - np. dla wyrażenia ^(AA|BB|ABC)$
oraz wejścia AB
jako błędne można oznaczyć trzy różne indeksy.
1
Można. Nazywa się to negacją dopasowania. Możesz zrobić warunek, który sprawdza czy dany ciąg znaków pasuje. Jeśli nie, to szuka tego, co nie pasuje.
Podaję przykład. Polecam sprawdzić na swoich przykładach i zmodyfikować wedle potrzeb.
let napis = 'abc 123 def**456 %% ** .. [] || ghi';
if (!napis.match('^\w+$')) {
let niedopasowane = [... napis.matchAll(/([^a-zA-Z0-9]+)/g)];
console.log(`Napis nie pasuje do wzorca. Nie pasują znaki (${niedopasowane.length}): `);
for (let i = 0; i < niedopasowane.length; i++) {
console.log(`# ${i}: '${niedopasowane[i]}'`);
}
}
W przykładzie wypisałem wszystko, co nie jest słowem. Oczywiście dla innych danych wyrażenie dopasowania będzie inne i może być bardzo skomplikowane.