Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Zachowanie się funkcji preg_match
Jozjasz
post 22.04.2013, 21:53:00
Post #1





Grupa: Zarejestrowani
Postów: 33
Pomógł: 0
Dołączył: 11.09.2009

Ostrzeżenie: (0%)
-----


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

Ten post edytował Jozjasz 22.04.2013, 22:05:53
Go to the top of the page
+Quote Post
b4x
post 22.04.2013, 21:55:46
Post #2





Grupa: Zarejestrowani
Postów: 658
Pomógł: 95
Dołączył: 20.12.2005
Skąd: N54,35° E18,63° (Gdańsk)

Ostrzeżenie: (0%)
-----


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 />';


Ten post edytował b4x 22.04.2013, 22:25:35


--------------------
Go to the top of the page
+Quote Post
Jozjasz
post 22.04.2013, 22:14:39
Post #3





Grupa: Zarejestrowani
Postów: 33
Pomógł: 0
Dołączył: 11.09.2009

Ostrzeżenie: (0%)
-----


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?

?
Go to the top of the page
+Quote Post
b4x
post 22.04.2013, 22:20:23
Post #4





Grupa: Zarejestrowani
Postów: 658
Pomógł: 95
Dołączył: 20.12.2005
Skąd: N54,35° E18,63° (Gdańsk)

Ostrzeżenie: (0%)
-----


  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

Ten post edytował b4x 22.04.2013, 22:23:34


--------------------
Go to the top of the page
+Quote Post
Jozjasz
post 22.04.2013, 22:25:57
Post #5





Grupa: Zarejestrowani
Postów: 33
Pomógł: 0
Dołączył: 11.09.2009

Ostrzeżenie: (0%)
-----


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.

Ten post edytował Jozjasz 22.04.2013, 22:26:57
Go to the top of the page
+Quote Post
b4x
post 22.04.2013, 22:30:16
Post #6





Grupa: Zarejestrowani
Postów: 658
Pomógł: 95
Dołączył: 20.12.2005
Skąd: N54,35° E18,63° (Gdańsk)

Ostrzeżenie: (0%)
-----


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';

Ten post edytował b4x 22.04.2013, 22:32:14


--------------------
Go to the top of the page
+Quote Post
Jozjasz
post 22.04.2013, 22:32:44
Post #7





Grupa: Zarejestrowani
Postów: 33
Pomógł: 0
Dołączył: 11.09.2009

Ostrzeżenie: (0%)
-----


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)
Go to the top of the page
+Quote Post
b4x
post 22.04.2013, 22:33:43
Post #8





Grupa: Zarejestrowani
Postów: 658
Pomógł: 95
Dołączył: 20.12.2005
Skąd: N54,35° E18,63° (Gdańsk)

Ostrzeżenie: (0%)
-----


  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

Ten post edytował b4x 22.04.2013, 22:46:41


--------------------
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 27.04.2024 - 16:06