Wątek przeniesiony 2014-03-12 13:08 z Flame przez Marooned.

Walka z Regex'em rozpoznającym łańcuchy tylko z pięcioma cyframi, kropką i trzema cyframi

0

Próbuję napisać Regex, który by mi wymuszał stringa składającego się z 5 cyfr, kropka, 3 cyfry (dokładnie taka kolejność) i już mnie frustracja chwyta bo jakoś nie kumam tego.
Próbuję zacząć od najprostszej rzeczy typu 5 cyfr i robię coś takiego

/[0-9]{5}/
ale np taki string "12345." (z kropką na końcu) też mi przechodzi jako prawidłowy. WTF?

dodanie znaczników <code> i `` - Furious Programming

1

Bo musisz na końcu tego regexpa dać $ a na początku ^
Wtedy będzie dopasowywało te ciągi, które zaczynają się tym co następuje po ^ i konczą się tym co poprzedza $

0

Bo kropka . oznacza "dowolny znak", a więc pasuje też do cyfry. Jeśli chcesz przypasować znak kropki, musisz ją "eskejpować", czyli pozbawić meta znaczenia.
Twój regex to:
/[0-9]{5}\.[0-9]{3}/ lub w skrócie, który działa na większości silników: /\d{5}\.\d{3}/
Można też dodać to o czym pisze tr, czyli znaczniki początku i końca ciągu: /^\d{5}\.\d{3}$/ - dzięki temu masz pewność, że "abc12345.678def" nie przejdzie.

I czemu to jest we Flame? Przenoszę do Newbie.

0

Rozwinięcie tego co napisali koledzy:

(^\d{5}\.\d{3}$)|(^\d{5}$)

Masz dwie grupy

  • pierwsza dopasuje wszystkie wyrażenia 5+3 cyfr rozdzielone kropką
  • druga tylko wyrażenia z pięcioma cyframi

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