![]() |
![]() ![]() |
![]() |
![]() ![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 3 Pomógł: 0 Dołączył: 6.04.2012 Ostrzeżenie: (0%) ![]() ![]() |
Cześć :) . Buduję sobie nową klasę do walidacji pewnych danych. Siadłem teraz do funkcji sprawdzającej poprawność wprowadzanego ciągu:
- może to być jedno słowo - może to być kilka słów oddzielonych pojedynczą spacją Podane wyrażenia mają celowo uproszczone zakresy i nie tylko, aby zwiększyć czytelność Wykrywanie jednego słowa: /^[a-z]+$/ Wykrywanie dwóch słów oddzielonych pojedynczą spacją (\s nie używam celowo): /^[a-z]+ [a-z]+$/ No ale w jednym ciągu może być jednocześnie jedno, dwa lub więcej słów. W związku z czym chciałem połączyć to w jedno wyrażenie regularne, zastosowałem więc alternatywę: /^(?:[a-z]+)|(?:(?:[a-z]+ )+)$/ Akceptuje wyrażenia: a, a b, a b c. Ale również zostają przyjęte wyrażenia, w których występuje kilka spacji.. czyli wyrażenie: a b przejdzie walidację. Mógłbym to z poziomu funkcji PHP sprawdzić, czy istnieje gdzieś ciąg ' ' (dwie spacje), który wykryłby dwa lub więcej białych znaków, ale chciałbym to rozwiązać na poziomie wyrażenia regularnego :> Próbowałem też tego: /^(?:[a-z]+)|(?:(?:[a-z]+ [a-z]+)+)$/, ale przyniosło dokładnie taki sam efekt jak przedtem. Dla Waszej wygody:
Jest pewnie jakieś proste rozwiązanie mojego problemu, próbowałem z zachłannością i leniwością, ale bez skutku (i tak to nic chyba nie pomoże w tym przypadku). Jak mówiłem uprościłem to maksymalnie jak się da, żeby tylko było łatwo odczytać treść;) Nie widzę tu błędu logicznego, a możliwe, że taki tu istnieje. Proszę o pomoc i pozdrawiam, Aravorn Ten post edytował Aravorn 15.07.2012, 13:50:43 |
|
|
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 77 Pomógł: 15 Dołączył: 19.11.2011 Ostrzeżenie: (0%) ![]() ![]() |
Polecam Ci strone www.rubular.com, pozwala szybko testować regexpy. Ten post edytował gr56 15.07.2012, 14:06:51 |
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 3 Pomógł: 0 Dołączył: 6.04.2012 Ostrzeżenie: (0%) ![]() ![]() |
Dzięki wielkie
![]() Pisałem, że nie używam \s, bo wykrywa nie tylko spacje. Normalna spacja w wyrażeniu załatwia problem, żaden tabulator nie przechodzi wtedy - może się komuś przydać, bo często chodzi ludziom o wykrywanie tylko spacji, nie pozostałych białych znaków ![]() |
|
|
![]()
Post
#4
|
|
![]() Grupa: Zarejestrowani Postów: 6 476 Pomógł: 1306 Dołączył: 6.08.2006 Skąd: Kraków Ostrzeżenie: (0%) ![]() ![]() |
Nieco bardziej przejrzystą formą byłoby
Kod ^[a-z]+(?: [a-z]+)*$ Czyli jeden wyraz i dowolna ilość wyrazów poprzedzonych pojedynczą spacją.
|
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 3 Pomógł: 0 Dołączył: 6.04.2012 Ostrzeżenie: (0%) ![]() ![]() |
Crozin - dzięki
![]() ![]() |
|
|
![]() ![]() |
![]() |
Aktualny czas: 20.08.2025 - 09:32 |