Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Zachowanie się funkcji preg_match
Forum PHP.pl > Forum > PHP
Jozjasz
Witam

Ostatnio trenuję z funkcją preg_match. Zachodzę w głowę jednak dlaczego zachowuje się ona następująco, tzn. nie działa

1.
  1. //2. Sprawdź czy występuje dokładnie 3 wystąpienia liery 'a' --> NIE DZIAŁA
  2. if(preg_match('/a{3}/',"aaaaa"))
  3. echo '2. jest';
  4. else
  5. echo '2. nie jest';
  6. echo '<br />';


Skoro jest 5 liter 'a', to skrypcik powinien zwrócić '2. nie jest'. Czy mógłby ktoś mnie oświecić dlaczego tak się nie dzieje?

2.
Chciałem napisać skrypt sprawdzający czy dany string zawiera tylko liczy od 0 do 9. Jednak jeśli poniżej zmienna $a ma więcej niż 12 znaków/cyfr, to zwraca false. Dlaczego tak się dzieje, skad ta magiczna granica 12 znaków.

  1. //nie może być wiecej jak 12 cyfr w liczbie?questionmark.gifquestionmark.gifquestionmark.gifquestionmark.gifquestionmark.gifquestionmark.gif
  2. $a = 790900088190;
  3. //10.
  4. if(preg_match("/^[0-9]+$/",$a))
  5. echo '10. jest';
  6. else
  7. echo '10. nie jest';
  8. echo '<br />';


Za wyjaśnienia wielkie dzięki
b4x
1) Zapytałeś tylko czy ma 3 znaki "aaa" w stringu.
Poprawnie powinno być to tak:

  1. if(preg_match('/^[a]{3}$/',"aaaaa"))
  2. echo '2. jest';
  3. else
  4. echo '2. nie jest';
  5. echo '<br />';


2)
  1. if(preg_match("/^[0-9]{1,12}+$/",$a))
  2. echo '10. jest';
  3. else
  4. echo '10. nie jest';
  5. echo '<br />';
Jozjasz
dzieki

Ale w drugim, ten mój skrtyp w momencie przekroczenia 12 cyfr zwraca FALSE. Gdy jest mniej cyfr zwraca TRUE. Ja chciałem napisać skrypt, który bedzie sprawdzał czy dany string zkłada się tyko i wyłącznie z cyfr od 0 do 9. Nic więcej.

Ale właśnie jak $a ma więcej niż 12 cyfr to zwraca FALSE. A tak przecież nie powinno być! Dlaczego tak sie dzieje?

?
b4x
  1. if(preg_match('/^[0-9]+$/', '12345678901234'))
  2. echo 1;
  3. else
  4. echo 0;


Wszystko zależy od tego, czy Twój komputer jest 32bit lub 64bit. 32-bitowy system może przetwarzać int od -2147483648 do 2147483648, natomiast 64-bitowy -9223372036854775807 do 9223372036854775807.

U mnie na OSX na localu (64-bit) - do 9223372036854775807 ładnie chodzi smile.gif
Jozjasz
dzięki, ale nie kapuję.

Ja chcę naspisać skrypt sprawdzający czy skrypt zkłada się tylko z cyfr. Tylko o to mi chodzi.

Mój problem polega na tym, że jak sprawdzany string przekroczy 12 znaków to zwacane jest FALSE. A nie powinno tak być, ponieważ string skłądający się z 20 znaków(cyfr) przykładowo, dalej składa się z cyfr.
b4x
Cytat
The size of an integer is platform-dependent, although a maximum value of about two billion is the usual value (that's 32 bits signed). 64-bit platforms usually have a maximum value of about 9E18. PHP does not support unsigned integers. Integer size can be determined using the constant PHP_INT_SIZE, and maximum value using the constant PHP_INT_MAX since PHP 4.4.0 and PHP 5.0.5.


#
W Twoim przypadku wygląda że jesteś na 32 bit - masz wyjście - integer dać do stringa. :-)

Czyli:

$a = '790900088190';
Jozjasz
no ok, ale to jak poprawić mój skrypt - na taki który weryfikowałby czy dany skrypt składa się wyłącznie z cyfr (a nie np. z liter)
b4x
  1. $zmienna_z_cyframi = '241248124127419';
  2. if(preg_match('/^\d+$/', $zmienna_z_cyframi))
  3. echo 1;
  4. else
  5. echo 0;


I będzie ok...

Aaaa jeszcze możesz użyć ctype_digit
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.