Pamiętaj o Ctype Functions

28 października 2009

Kolejna drobna wskazówka dla programistów PHP. W kursach o tym nie przeczytacie :P

Bywa tak, nawet całkiem często, że musimy się upewnić, że w zmiennej mamy np. tylko same cyfry lub małe litery. Pierwsze co wszystkim przychodzi do głowy to wyrażenia regularne. Ale chyba każdy z nas słyszał nie raz przestrogę, że jak można to lepiej unikać wyrażeń bo są wolne. Czy jest jakaś alternatywa?

A jest :P Nazywa się to Character type checking. Funkcji do wyboru jest kilkanaście, przykładowo (za php.net):

PHP:
  1. <?php
  2. $strings = array('1820.20', '10002', 'wsl!12');
  3. foreach ($strings as $testcase) {
  4.     if (ctype_digit($testcase)) {
  5.         echo "The string $testcase consists of all digits.\n";
  6.     } else {
  7.         echo "The string $testcase does not consist of all digits.\n";
  8.     }
  9. }
  10. ?>

Dostaniemy:

CODE:
  1. The string 1820.20 does not consist of all digits.
  2. The string 10002 consists of all digits.
  3. The string wsl!12 does not consist of all digits.

Lista wszystkich dostępnych funkcji znajduje się tutaj, polecam się z nimi zapoznać. Testy wykazują, że funkcje wykonują się znacznie szybciej niż wyrażenia regularne. Funkcje ctype_* są wbudowane w PHP, nie trzeba się martwić o ich dostępność.

 Dodaj komentarz

8 odpowiedzi dla tego wpisu

  1. guci0 napisał:

    Dzięki – nie znałem tak z głowy :)
    Pozdrawiam miło!
    Paweł P.

  2. guci0 napisał:

    A orientujesz się może, jak teraz dla PHP 5+ porównać, czy w danym
    string’u mamy jakiś string – patrz funkcja eregi(). Ponieważ wczoraj przeczytałem, przez przypadek, że “This function has been DEPRECATED as of PHP 5.3.0 and REMOVED as of PHP 6.0.0. Relying on this feature is highly discouraged.”

  3. MariuszT napisał:

    Jak chcesz sprawdzić czy w stringu znajduje się jakiś inny string to skorzystaj ze strpos(). eregi odchodzą w zapomnienie, są wolne, nie korzystam z nich od lat. Do wyrażeń regularnych używaj preg_*, w Twoim przypadku preg_match(). Ale rozsądnie z tymi wyrażeniami, często można się obejść bez nich.

  4. guci0 napisał:

    @MariuszT – dzięki! Napewno sprawdzę!

  5. guci0 napisał:

    strpos() – działa świetnie, trochę inaczej niż eregi(), ale ma większą funkcjonalność. To bardzo dobrze, że nie korzystasz “z nich” od lat.

  6. Zyx napisał:

    Funkcje ctype_* będą od PHP 6.0 wycofywane z powodu przejścia na Unicode, z którym nie są zgodne. W zamian mają zostać zaproponowane inne mechanizmy.

  7. Paweł napisał:

    Funkcja strpos służy do sprawdzania na której pozycji w stringu leży drugi string. Do sprawdzania czy w ciągu znaków występuje jakiś tekst służy funkcja strstr albo ignorująca wielkość liter stristr.

  8. MariuszT napisał:

    Nieprawda:

    string strstr ( string $haystack , mixed $needle [, bool $before_needle = false ] )
    Returns part of haystack string from the first occurrence of needle to the end of haystack .

Odpowiedz



Podobne wpisy: