2016-12-21 17 views
5

Czy istnieje prosty sposób na uzyskanie przeciwieństwa wyrażenia regularnego lub czy muszę zbudować nowe wyrażenie regularne, które jest przeciwieństwem tego, co mam?Łatwy sposób na usunięcie tego, czego NIE ma w regex

Na przykład używam tego wyrażenia regularnego, aby upewnić się, że otrzymuję prawidłowe wartości walutowe - bez znaku $.

/^[0-9]+(\.[0-9][0-9]?)?$/ 

Chcę teraz usunąć wszystko, co nie mieści się w tym schemacie. Na przykład, jeśli użytkownik wprowadzi litery lub spróbuje wprowadzić dwa okresy, np. 7.50.6, chcę usunąć niepożądane znaki. Jak mogę to zrobić?

+1

w jaki sposób używasz wyrażenia regularnego? – Isaac

+0

Obecnie używam go do testowania tj. MyValue.test (myRegex); Ale teraz, w mojej aplikacji React, chcę całkowicie uniemożliwić wprowadzanie niepożądanych wartości przez użytkownika. – Sam

+0

Być może wypróbuj 'value = value.match (/ [0-9] + (\. [0-9] {1,2})? /) [0]'? Być może podążasz za mną. – Isaac

Odpowiedz

2

Myślę, że wybierasz się w niewłaściwy sposób. Po pierwsze, próba ukrywania błędu wejścia w taki sposób jest złym pomysłem. Jeśli użytkownik musi wpisać liczbę i umieści dodatkową kropkę, co powie Ci, która część jest dobra, a która jest zła? Lepiej powiesz użytkownikowi, że coś jest nie tak z ich danymi wejściowymi.

Ale zazwyczaj używasz wyrażenia regularnego, określając, jak ma wyglądać ORAZ jakie są znaczące części, które chcesz nadal używać grup przechwytywania.

To jest grupa przechwytująca: ([a-z0-9])@example.com; jest to grupa niezarejestrowana: (?:hello|hi).

W przypadku numeru telefonu ważne są tylko cyfry, dzięki czemu można je przechwytywać i akceptować wiele form znaków pośrednich. Oto prosta o kod pocztowy:

([A-Z][0-9][A-Z]) ?([0-9][A-Z][0-9]) 

Następnie wszystko co musisz zrobić, to połączyć przechwycone grupy. Jeśli jest obecny, spacja nie zostanie przechwycona.

Znajdź więcej przykładów na temat MDN.

+0

Pomimo twoich sugestii, wciąż nie odpowiada, jak potencjalnie odwrócić regex – Isaac

+0

Nie próbuję niczego ukrywać. Usuwam je. Na przykład, jaki jest sens w umożliwieniu użytkownikowi wpisywania liter w numerze telefonu, a następnie w celu naprawy. Ponieważ React polega wyłącznie na zarządzaniu stanem, mogę wykryć, że użytkownik wpisał litery i po prostu NIE umieszcza ich w moim stanie. Dzięki temu mogę mieć ściśle zarządzane pole wejściowe. – Sam

+0

Rzeczywiście, nie odpowiada, jak odwrócić wyrażenie regularne. Bardzo wątpię, że warto spróbować - widzę to jako [XY Problem] (http://xyproblem.info/). –