Нужна функция проверки строковой переменной на Php

Discussion in 'PHP' started by -=lebed=-, 8 Dec 2007.

  1. -=lebed=-

    -=lebed=- хэшкрякер

    Joined:
    21 Jun 2006
    Messages:
    3,803
    Likes Received:
    1,957
    Reputations:
    594
    check($value)

    if Only numeric (0-9) (1-8 символов)
    or
    Only loweralpha(a-z) (1-6 символов)
    or
    Only alpha (A-Z) (1-6 символов)
    -> false

    else -> true

    ЗЫ Вообщем ложь, если только цифры 1-8 символов или только строчные 1-6 символов или только заглавные 1-6 симоволов, в остальных случаях правда...
     
  2. GreenBear

    GreenBear наркоман с медалью

    Joined:
    7 May 2005
    Messages:
    2,548
    Likes Received:
    1,397
    Reputations:
    612
    PHP:
    function mda($s){
    if(
    ereg('^([0-9]{1,8})$'$s)) return false;
    if(
    ereg('^([a-z]{1,6})$'$s)) return false;
    if(
    ereg('^([A-Z]{1,6})$'$s)) return false;
    return 
    true;
    }
     
    1 person likes this.
  3. Helios

    Helios Elder - Старейшина

    Joined:
    14 Jan 2007
    Messages:
    414
    Likes Received:
    180
    Reputations:
    103
    PHP:

    function check($str)
    {
      return 
    preg_match('/^([0-9]{1,8}])$|^([a-z]{1,6})$|^([A-Z]{1,6})$/'$str);
    }

    Регулярки те же, но preg_match работает быстрее
     
    2 people like this.
  4. Macro

    Macro Elder - Старейшина

    Joined:
    11 Nov 2006
    Messages:
    552
    Likes Received:
    298
    Reputations:
    207
    Лучше так

    PHP:

    function check($str)
    {
    if(
    preg_match('/^({[0-9]{1,8}}|{[a-z]{1,6}}|{[A-Z]{1,6}})$/'$str);)
     { return 
    false;}
    else {return 
    true;}
    }

     
    #4 Macro, 8 Dec 2007
    Last edited: 8 Dec 2007
  5. Helios

    Helios Elder - Старейшина

    Joined:
    14 Jan 2007
    Messages:
    414
    Likes Received:
    180
    Reputations:
    103
    Во первых:
    Code:
    ({[0-9]{1,8}}
    несовпадение открывающих и закрывающих скобок (фигурные и круглые)

    Во вторых:
    Code:
    {[a-z]{1,6}}
    Неверное использование фигурных скобок
    В третьих:
    Code:
     if (preg_match(...) {return true;} else {return false;})
    Лишнее условие, а условные переходы являются самой медленной частью в любой программе
    PS: зато идея "вынести за скобки" ^ и $ - как раз в тему+)
     
    1 person likes this.
  6. Macro

    Macro Elder - Старейшина

    Joined:
    11 Nov 2006
    Messages:
    552
    Likes Received:
    298
    Reputations:
    207
    Ты прав,я прокололся. Но твоя функция работает неверно.Вот так работает правильно:
    PHP:
    function check($str

    return 
    preg_match('/(^[0-9]{1,8}$)|(^[a-z]{1,6}$)|(^[A-Z]{1,6}$)/',$str)>0?false:true;
     }

     
  7. Helios

    Helios Elder - Старейшина

    Joined:
    14 Jan 2007
    Messages:
    414
    Likes Received:
    180
    Reputations:
    103
    Прочитай цитату из документации пхп в моем предыдущем посте, там ясно написано, что preg_match может возвращать только два значения: 0 или 1, а они в php равносильны false или true соответственно.

    Поэтому проверка
    Code:
    >0?false:true
    излишня
     
  8. Macro

    Macro Elder - Старейшина

    Joined:
    11 Nov 2006
    Messages:
    552
    Likes Received:
    298
    Reputations:
    207
    Нет, не излишняя ибо в случае не нахождения совпадений ппо твоей функции она выкинет 0, а эта фуннкция должна наоборот выкинуть 1.
     
  9. Digimortal

    Digimortal Banned

    Joined:
    22 Aug 2006
    Messages:
    471
    Likes Received:
    248
    Reputations:
    189
    тогда все равно можно обойтись без проверки.. )
     
    1 person likes this.
  10. nerezus

    nerezus Banned

    Joined:
    12 Aug 2004
    Messages:
    3,191
    Likes Received:
    727
    Reputations:
    266
    ппц ))))
    а ?: или приведение типов (bool) заюзать? )
     
  11. Helios

    Helios Elder - Старейшина

    Joined:
    14 Jan 2007
    Messages:
    414
    Likes Received:
    180
    Reputations:
    103
    А зачем оно там нужно?