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

!preg_match żeby nie było można wpisać *!@$%^&()

Object Storage Arubacloud
0 głosów
634 wizyt
pytanie zadane 29 kwietnia 2017 w PHP przez dervil Gaduła (3,030 p.)
edycja 29 kwietnia 2017 przez dervil

JAK ZROBIĆ WALIDACJĘ ŻEBY MOŻNA BYŁO WPISAĆ LINK LUB WYRAZ ALE NIE BYŁO MOŻLIWOŚCI WPISANIA TAKICH ZNAKÓW JA *(

ZROBIŁEM TAK

if(
!preg_match
 (
     #^[a-zA-Z0-9ąćęłńóśźżĄĆĘŁŃÓŚŹŻ http:// https:// -.?_]+$#',
     $_POST['xxx1']
  )
)    {     }                       

ALE JAK WPISZĘ *(aaaa) TO PRZEPUSZCZA, A JA NIE CHCE ŻEBY TAKIE ZNAKI PRZEPUSZCZAŁO JAK *(

1 odpowiedź

+1 głos
odpowiedź 29 kwietnia 2017 przez Chess Szeryf (76,710 p.)
edycja 29 kwietnia 2017 przez Chess

http://php.net/manual/en/function.preg-match.php

Najpierw popatrz człowieku jaki typ zwraca funkcja: preg_match(). Zwraca ona typ int, czyli jest to wartość liczbowa. Czyli funkcja ta zwraca ci jakąś liczbę, najczęściej chyba zero i jeden choć nie jestem pewien, co do tego, bo wartość nie jest ustawiona na typ bool. 

Posłużę się przykładem:

<?php  

if(preg_match('@^[a-z]+$@','jajko')==true){
	echo 'Wpisałeś dozwolone znaki';
}else{ 
	echo 'Wpisałeś niedozwolone znaki';
}
								
?>

Powiem szczerze, że nie wiem dlaczego funkcja: preg_match zwraca typ int, a nie bool, być może później o tym poczytam. 

Return Values

preg_match() returns 1 if the pattern matches given subject, 0 if it does not, or FALSE if an error occurred.

Warning

This function may return Boolean FALSE, but may also return a non-Boolean value which evaluates to FALSE. Please read the section on Booleans for more information. Use the === operator for testing the return value of this function.

Trochę poczytałem i po przetłumaczeniu tego na polski:

Preg_match () zwraca 1, jeśli wzorzec pasuje do danego tematu, 0, jeśli nie, lub FALSE, jeśli wystąpił błąd.

Tut: http://www.gajdaw.pl/php/walidacja-formularzy/p6.html

komentarz 29 kwietnia 2017 przez dervil Gaduła (3,030 p.)
no to czyli jeżeli wpiszę jakiś znak a nie ma go zdefiniowanego w preg to powinno zwrócić 1 a tu w przypadku np znaku * zwraca 0 czyli przepuszcza, dobrze to rozumiem?
komentarz 29 kwietnia 2017 przez Chess Szeryf (76,710 p.)
edycja 29 kwietnia 2017 przez Chess

Jeśli jakiegoś znaku nie ma zdefiniowanego we wzorcu to funkcja zwróci wartość: bool(false).

komentarz 29 kwietnia 2017 przez dervil Gaduła (3,030 p.)
a no to czyli odwrotnie, ale to dlaczego skoro nie mam w wzorcu zdefiniowanego znaku * to jak wpisuję *(aaa to przepuszcza skubana no? ;p
komentarz 29 kwietnia 2017 przez dervil Gaduła (3,030 p.)
nie chce kombinować z ctype i validate_url , wolałbym zrobić preg , ale nie daje mi spokoju to że przepuszcza *** tą gwiazdkę
komentarz 29 kwietnia 2017 przez Chess Szeryf (76,710 p.)
edycja 29 kwietnia 2017 przez Chess

Znak gwiazdki oznacza powtórz zero lub więcej razy.

https://www.p-programowanie.pl/php/budowanie-wyrazen-regularnych-php/
http://php.net/manual/en/regexp.reference.meta.php

Jeśli nie chcesz, aby skrypt przepuszczał ci znak gwiazdki, to napisz taki skrypt:

if($x=preg_match('@^.*\\*.*+$@','tekst * tekst',$match)==1){
	echo 'W kodzie użyłeś gwiazdki, więc FAIL';
}else{ 
	echo 'W kodzie nie użyłeś gwiazdki, więc PASS';
}

Jeśli w tekście wystąpi znak gwiazdki to wyświetli się pierwszy komunikat, zaś gdy nie wystąpi to wyświetli się drugi.

https://4programmers.net/PHP/Wyra%C5%BCenia_Regularne_(Regular_Expression)

1
komentarz 29 kwietnia 2017 przez xandros Nałogowiec (29,450 p.)

regex powinien się zaczynać i kończyć tym samym znakiem, z reguły używa się "/" lub "~"

Poleciłbym do testowania debugex, ale najwidoczniej na razie mają problemy z serwisem.

komentarz 29 kwietnia 2017 przez Arkadiusz Waluk Ekspert (287,950 p.)
Nie wiem co dokładnie ten serwis oferował, ale ja polecam https://regex101.com - wydaje mi się, że jest wszystko co potrzebne.
komentarz 29 kwietnia 2017 przez dervil Gaduła (3,030 p.)
ja myślałem że to forum dyskusyjne i programistyczne , dlatego bardzo bym prosił o pisanie konkretnych odpowiedzi a nie wstawianie linków, jak już coś to jako dodatek anie całkowitą odpowiedź
komentarz 3 maja 2017 przez dervil Gaduła (3,030 p.)
dzięki, ciekawy kod.

a co to jest ten tekst ???

 czy zamiast text powinno być chyba a-zA-Ząę itd?

i dlaczego użyty jest 2 razy?

a przy okazji masz jakiś preg na słowo, że jak wpiszesz jakieś słowo to nie przepuszcza?

Podobne pytania

0 głosów
2 odpowiedzi 1,444 wizyt
pytanie zadane 18 października 2018 w JavaScript przez drraco Początkujący (370 p.)
0 głosów
2 odpowiedzi 358 wizyt
pytanie zadane 8 grudnia 2015 w JavaScript przez artimal Gaduła (4,800 p.)
0 głosów
1 odpowiedź 100 wizyt
pytanie zadane 7 grudnia 2020 w PHP przez Młody programista Obywatel (1,200 p.)

92,572 zapytań

141,423 odpowiedzi

319,645 komentarzy

61,959 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!

...