/ / Regex - minimum i maksimum każdego typu symbolu - wyrażenie regularne

Regex - minimum i maksimum każdego typu symbolu - regex

Muszę sprawdzić, czy ciąg zawiera od 0 do 3 spacji i 16 cyfr. Jak mogę to zrobić ? Wszystko, co wymyślę, to tylko sprawdzenie sumy

^[0-9- ]{16,19}$

Odpowiedzi:

2 dla odpowiedzi № 1

Powinieneś użyć

^(?=(?:[^ ]* ){0,3}[^ ]*$)(?=(?:[^0-9]*[0-9]){16}[^0-9]*$)[0-9- ]+$

Zobacz Prezentacja regex na regex101.com.

Alternatywnie, pierwsza pozytywna kontrola wyprzedzenia spacji może być zastąpiona negatywną z odwrotną logiką:

^(?!(?:[^ ]* ){4})(?=(?:[^0-9]*[0-9]){16}[^0-9]*$)[0-9- ]+$

Widzieć kolejne demo

Oba wyrażenia regularne są napisane przy pomocy zasada kontrastu pamiętaj, aby szybciej nie powtarzać wyrażenia regularnego, jeśli wzorzec wyprzedzający nie pasuje.

Detale:

  • ^ - początek łańcucha
  • (?!(?:[^ ]* ){4}) - negatywny wynik z wyprzedzeniem nie powiodący się, jeśli po prawej stronie bieżącej lokalizacji znajdują się 4 sekwencje:
    • [^ ]* - 0+ znaków innych niż spacja
    • - przestrzeń
  • (?=(?:[^0-9]*[0-9]){16}[^0-9]*$) - pozytywny wynik wyprzedzający wymagający, aby cały ciąg znaków zawierał 16 sekwencji zerowych cyfr ([^0-9]*), a następnie 1 cyfra, a następnie 0+ znaki inne niż cyfra do końca ciągu
  • [0-9- ]+ - pasuje do ponad 1 znaków, które są cyframi, - lub spacje
  • $ - koniec ciągu.

2 dla odpowiedzi nr 2

Możesz użyć tego wyrażenia regularnego na podstawie lookaheads:

^[0-9](?!(?:[0-9]* ){4})(?=(?: *[0-9]){15}$)[0-9- ]+[0-9]$

RegEx Demo

  • ^[0-9] i [0-9]$ zapewnia, że ​​mamy tylko cyfry na początku i na końcu.
  • (?!(?:[0-9]* ){4}) jest ujemny, aby uniemożliwić 4 spacje (umożliwiając w ten sposób od 0 do 3 białych spacji)
  • (?=(?: *[0-9]){16} *$) ma pozytywny wpływ na przyszłość, umożliwiając wprowadzenie dokładnie 16 cyfr na wejściu w otoczeniu opcjonalnych spacji.