Potrzebuję wyrażenie regularne do sprawdzania ciąg. Łańcuch może być pusty, może zawierać 5 cyfr i może mieć 9 cyfr. Inne sytuacje są nieważne. Używam następnego wyrażenia:Długość cyfr regex PHP tylko 5 lub 9
/\d{5}|\d{9}/
Ale to nie działa.
Potrzebuję wyrażenie regularne do sprawdzania ciąg. Łańcuch może być pusty, może zawierać 5 cyfr i może mieć 9 cyfr. Inne sytuacje są nieważne. Używam następnego wyrażenia:Długość cyfr regex PHP tylko 5 lub 9
/\d{5}|\d{9}/
Ale to nie działa.
Podobnie jak Marc B said in the comments, chciałbym użyć tego wyrażenia regularnego:
/^(\d{5}(\d{4})?)?$/
Dopasowuje albo dokładnie pięć cyfr, które mogą być stosowane przez kolejne cztery cyfry (zatem dziewięciu cyfr w sumie) lub bez znaków na wszystkich (zwróć uwagę na kwantyfikator ?
wokół wyrażenia cyfr, który sprawia, że grupa jest opcjonalna).
Zaletą tego wzoru w przeciwieństwie do innych wymienionych wzorów z naprzemiennymi zmianami jest to, że nie będzie to wymagało cofnięcia, jeśli dopasowanie pięciu cyfr zakończy się niepowodzeniem.
"nie działa" to niewiele pomoże. ale czy nie byłoby to coś takiego?
/^(\d{5}|\d{9}|)$/
(Bit zardzewiały na regexp, ale staram się zrobić to „start, następnie 5 lub 9 cyfr albo nic, a następnie zakończyć)
~^(?:\d{5}|\d{9}|)$~
Zapomniałaś kotwice ^
i $
. Bez nich łańcuch będzie pasować te cyfry w dowolnym miejscu w ciągu, nie tylko na początku lub na końcu. Ponadto, że nie pokrywa pusty ciąg znaków.
zastosowania kotwic i „?”, aby umożliwić pusty ciąg
/^(\d{5}|\d{9})?$/
Odpowiedź na pytanie, dlaczego praca jest wykonywana w reperkusjach w stylu Perla, jest priorytetowana od lewej do prawej.
go zmienić na:
/\d{9}|\d{5}/
(Choć to nie powiem ci coś jeszcze o 6-8 i 10-nieskończoność chyba że zakotwiczone twierdzeń lub coś innego).
/^(\d{5}|\d{9}|)$/
'/^(\ d {5}) (\ d {4})?) $ /'? Zakładając, że cyfry są jedyną rzeczą w łańcuchu, pasuje to do 5 cyfr, opcjonalnie po 4 kolejne. –
@MarcB: To nie jest nawet poprawne składniowo. –
Cuirious, co powiedziałby ci pusty ciąg? – sln