• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Jak sprawdzić czy wyraz zawiera wyłącznie litery alfabetu (z polskimi znakami)?

Object Storage Arubacloud
0 głosów
2,149 wizyt
pytanie zadane 8 lutego 2016 w PHP przez Laxus Początkujący (280 p.)

Witam.

Chciałbym się dowiedzieć jak można sprawdzić czy zmienna w PHP jest stringiem złożonym wyłącznie z liter alfabetu, ale z obsługą polskich znaków.

Po 3 lekcji kursu PHP na tej stronie postanowiłem rozbudować trochę formularz rejestracji o takie pozycje jak np. Imię, Nazwisko czy Miasto i tu pojawił się problem. Przy pisaniu walidacji chciałbym dodać ify odpowiedzialne za sprawdzenie czy wpisana przez użytkownika wartość jest poprawna. W kursie przy walidacji była mowa tylko o funkcji ctype_alnum(), w googlach odlalazłem więc potrzebną mi funkcję ctype_alpha(). Tyle że ona także nie przepuszcza polskich znaków, a w przypadku imienia czy nazwiska mało to profesjonalnie wygląda.

Kombinuje jak to naprawić i nie daje rady. Wygooglowałem jedynie funkcję setlocale(), ale nie działa lub nie potrafię jej używać.

Tak wygląda wycinek kodu odpowiedzialny za sprawdzenie imienia:

//Sprawdzenie czy imię zawiera wyłącznie litery alfabetu
			setlocale( LC_CTYPE, 'PL_pl.UTF-8' );
			if( ctype_alpha( $name ) == false ){
				
				$ok = false;
				$_SESSION[ 'name_error' ] =
					'<tr rowspan = "2" class = "error">
					
						<td colspan = "2">
						
							Imię może zawierać wyłącznie
							<br />
							litery alfabetu
						
						</td>
					
					</tr>';
				
			}

 

3 odpowiedzi

0 głosów
odpowiedź 9 lutego 2016 przez Sedi Stary wyjadacz (10,200 p.)

Spróbuj użyć funkcji:

idn_to_ascii

Swoją drogą, to wybacz trochę prywaty, ale nie zrozumiem nigdy jak można uczyć ludzi mysqli :P Między mysqli, a PDO jest przepaść... Przeskoczenie między mysqli a PDO nie jest takie proste, jak Mirek uważa :) Poza tym PHP7 zlikwidowało już poprzednią wersję, strukturalnego pisania, czyli mysql(bez i na końcu). To samo pewnie spotka za rok, czy dwa mysqli... Te filmy niedługo będą miały wartość prehistoryczną.

Zresztą był już taki temat: https://forum.pasja-informatyki.pl/94166/review-odcinka-php-%233-poczytaj?show=94166#q94166

Porównując mysqli, do PDO, to tak, jakby przyszłych kierowców uczyć jazdy konno. Pojeżdżą sobie, tylko czy to przeniesie się na ich przyszłą jazdę ? 

Pozdrawiam :)

0 głosów
odpowiedź 9 lutego 2016 przez Arkadiusz Waluk Ekspert (287,950 p.)
Nie lepiej skorzystać z regexów (wyrażenia regularne) i preg_match?

Polecam tą stronkę: https://regex101.com/ można sobie "na żywo" dopasowywać regexa i widzisz co przechodzi ;)
0 głosów
odpowiedź 9 lutego 2016 przez Laxus Początkujący (280 p.)

Jeżeli chodzi o wyrażenia regularne to wiem, że mogę ich użyć, ale narazie się ich nie uczę. Wole próbować metodami z kursu. Ogólnie zdaje mi się, że nawet lepiej jest uczyć się tym sposobem, bo jakbym odrazu próbował skorzystać z wyrażeń regularnych, to z tego co mi się wydaje nie byłoby potrzeby używania takich funkcji jak ctype czy filter_var, a tak to się przynajmniej czegoś dodatkowo nauczę. Ja dopiero zaczynam swoją przygodę z programowaniem, więc może mi się to przydać.

A tak w ogóle to mi się wydaje, że pisanie walidacji w PHP jest trochę bez sensu, do tego chyba się bardziej JavaScript nadaje. Ale też warto wiedzieć jak to zrobić w PHP. Od czegoś trzeba zacząć.

A jeśli chodzi o idn_to_ascii, to jak próbuję użyć tej funkcji to mi wyświetla błąd:

 Fatal error: Call to undefined function idn_to_ascii()

komentarz 9 lutego 2016 przez Sedi Stary wyjadacz (10,200 p.)
edycja 9 lutego 2016 przez Sedi
Najprawdopodobniej źle napisałeś :)

http://forum.php.pl/PHP_filter_validate_email_polskie_znaki_t247182.html

http://php.net/manual/en/function.idn-to-ascii.php

A co do kursu, to poczytaj sobie wpis Commandera(wejdź w Pasjonatów na tym forum, by przekonać się, kto to jest) :

http://www.webkrytyk.pl/krytyka/wideokursy/wideokursy-2-kurs-php-miroslawa-zelenta/
komentarz 9 lutego 2016 przez Arkadiusz Waluk Ekspert (287,950 p.)

A tak w ogóle to mi się wydaje, że pisanie walidacji w PHP jest trochę bez sensu, do tego chyba się bardziej JavaScript nadaje.

Mi się wydaje (a nawet jestem pewien), że nie za bardzo. Wyobraź sobie, że masz formularz rejestracji i w JS zrobioną tą piękną walidację niech będzie nawet że samej ilości znaków w loginie. Teraz jakiś użytkownik wyłączy sobie JavaScript na Twojej stronie i... może sobie wprowadzić dowolny login, składający się z dowolnej ilości znaków. Tego oczekujesz? Bo mi się wydaje że nie koniecznie :) Tak więc walidacja przez JS okej, może być bo ładnie wygląda dla użytkownika i odciąża serwer, ale po stronie serwera wg mnie musi być też to zrobione, aby mieć pewność czy wpisane dane są takie jakich oczekujesz.

Ja bym robił przez regexy, przyznam nawet, że sam nie znam tej funkcji o której wspominasz, nie była mi nigdy potrzebna.

komentarz 9 lutego 2016 przez ZakosiliMiNeta Nałogowiec (30,870 p.)
Przydadzą się tobie na pewno wyrażenia regularne
komentarz 9 lutego 2016 przez Pietrak Pasjonat (18,850 p.)
Wydaje mi się, że najlepiej użyć sanityzacji i porównać do tego co wprowadzono http://php.net/manual/en/filter.filters.sanitize.php

Podobne pytania

0 głosów
1 odpowiedź 509 wizyt
pytanie zadane 22 września 2019 w PHP przez Kaiena Nowicjusz (120 p.)
0 głosów
0 odpowiedzi 118 wizyt
pytanie zadane 8 kwietnia 2019 w PHP przez rafal.budzis Szeryf (85,260 p.)
0 głosów
1 odpowiedź 271 wizyt

92,579 zapytań

141,432 odpowiedzi

319,664 komentarzy

61,964 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...