Wykrycie który znak nie pasuje do regexa

0

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

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.

1 użytkowników online, w tym zalogowanych: 0, gości: 1