Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php] liczba znaków w zmiennych
Forum PHP.pl > Forum > Przedszkole
Gordon1x
Jak sprawdzić czy w zmiennej znajduje się 5 lub 6 znaków, ponieważ dopuszczalny jest zapis 12-345 lub 12345. Oraz jak sprawdzić czy znaki w zmiennej są liczbami.

  1. <?php
  2. $zmienna1= "12-345";
  3. $zmienna2 = "12345";
  4. ?>
UDAT
Użyj strlen" title="Zobacz w manualu PHP" target="_manual do sprawdzenia długości.
Do sprawdzenia czy coś jest cyfrą możesz wykorzystać ctype_digit" title="Zobacz w manualu PHP" target="_manual, wyrażeń regularnych lub prostego testu:
  1. <?php
  2. function isDigit ( $val ) {
  3.  return (strval(intval($val)) == $val);
  4. }
  5. ?>
tiraeth
  1. <?php
  2. function ispostcode($zmienna) {
  3.  if ( strlen($zmienna) < 7 && strlen($zmienna) > 4 ) {
  4. $zmienna = str_replace('-', '', $zmienna);
  5. if ( $zmienna == (int)$zmienna ) {
  6.  return true;
  7. } else {
  8.  return false;
  9. }
  10.  } else {
  11. return false;
  12.  }
  13. }
  14. ?>


Rozwiązanie łopatologiczne...
phpion
A może ereg" title="Zobacz w manualu PHP" target="_manual? Chyba najpewniejsze rozwiązanie...
  1. ^[0-9]{2}-?[0-9]{3}$
UDAT
Cytat(tiraeth @ 10.08.2007, 11:48:40 ) *
Rozwiązanie łopatologiczne...


Niestety twoje rozwiązanie nie zadziała.

Działanie funkcji is_int" title="Zobacz w manualu PHP" target="_manual nie polega na sprawdzeniu czy zmienna jest liczbą, tylko sprawdza ustawiony wewnętrznie typ zmiennej, dlatego jeśli $zmienna na wejściu jest stringiem, to zawsze twoja funkcja zwróci false.

Popraw mnie jeśli się mylę.
tiraeth
Cytat(UDAT @ 10.08.2007, 12:53:02 ) *
Niestety twoje rozwiązanie nie zadziała.

Działanie funkcji is_int" title="Zobacz w manualu PHP" target="_manual nie polega na sprawdzeniu czy zmienna jest liczbą, tylko sprawdza ustawiony wewnętrznie typ zmiennej, dlatego jeśli $zmienna na wejściu jest stringiem, to zawsze twoja funkcja zwróci false.

Popraw mnie jeśli się mylę.


Po części się mylisz.
  1. <?php
  2. $s = 'bla';
  3. $s = 1;
  4. echo is_int($s); // Returns 1
  5. ?>


Natomiast faktycznie, w tym przypadku nie mamy 12345 tylko '12345', więc string.

Poprawiłem instrukcję warunkową: if ( $string == (int)$string )
UDAT
Niestety nic to nie dało.
  1. <?phpvar_dump ( ispostcode('-----')); //zwraca bool(true) choć nie do końca jest to dopuszczalny zapis?>



Spowodowane jest to tym, że PHP gdy porównuje int'a ze stringiem rzutuje stringa na inta
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.