[Регулярки & Mod_Rewrite] Задай вопрос, получи ответ.

Discussion in 'PHP' started by .:EnoT:., 19 Nov 2008.

Thread Status:
Not open for further replies.
  1. xNPC

    xNPC New Member

    Joined:
    12 Mar 2009
    Messages:
    8
    Likes Received:
    0
    Reputations:
    0
    Делал так же, но почему то не работало (
     
  2. Pashkela

    Pashkela Динозавр

    Joined:
    10 Jan 2008
    Messages:
    2,750
    Likes Received:
    1,044
    Reputations:
    339
    if ( (preg_match('/[a-z]/i,$open)) && (preg_match('/[а-я]/i,$open)) echo "olololo! Don't meshat niki, no plz!";

    это к вопросу о смешанных никах (русс/англ). Остальное долго курил, вообще не понял вопроса
     
  3. xNPC

    xNPC New Member

    Joined:
    12 Mar 2009
    Messages:
    8
    Likes Received:
    0
    Reputations:
    0
    Собственно выслушал всех, вот что получил:

    PHP:
    elseif........
    elseif ( (
    preg_match('/[a-z]/i',$user)) && (preg_match('/[а-я]/i',$user)))
        {
    $msg "Ник содержит запрещенные знаки!";}
        elseif (!
    preg_match("!^[абвгдежзийклмнопрстуфхцчшщъыьэюяАБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯa-z1-9@\\*\\)\\(\\?\\!\\-_\\]\\[=~]+$!i",$user))
        {
    $msg "Ник содержит запрещенные знаки!";}
    elseif...
    Как то вот так, и все нормально робит xD
    з.ы. с русскими буквами глюки, если их проверяешь в отдельном выражении от латыни то принимает "а-яi", а если в одном то приходится весь алфавит в нижнем и верхнем регистре писать, мб кто то подскажет как избавиться от этого
     
  4. ++Norton++

    ++Norton++ Elder - Старейшина

    Joined:
    20 Nov 2006
    Messages:
    167
    Likes Received:
    39
    Reputations:
    0
    Есть среди прочей лабуды на странице такое сочетание:
    Code:
    всякий разный текст... += "123456"; всякий разный текст...
    
    Где "всякий разный текст" - это текст, он меняется и тд.
    +="123456" - остается постоянным, т.е. 123456 может меняться, но "+=" есть всегда.
    Нужно из такой страницы взять значения после += которые идут в кавычках. Т.е. только значения. В данном случае 123456.
    Заранее спасибо!
     
    #1044 ++Norton++, 11 Apr 2010
    Last edited: 11 Apr 2010
  5. Compton

    Compton Member

    Joined:
    31 Jan 2010
    Messages:
    290
    Likes Received:
    25
    Reputations:
    0
    PHP:
    preg_match('/\+=\s?"(.+)";/',$text$res);
     
  6. ZnikiR

    ZnikiR Member

    Joined:
    14 Jan 2009
    Messages:
    117
    Likes Received:
    21
    Reputations:
    -5
    Проблема при проверки имени пользователя.
    Имя пользователя может быть как на латинице так и на киррилице.
    При использование Кирилицы (русского) выдает ошибку.

    Вот код
    PHP:
    function name_check($name){
    $name trim($name);
    if (
    strlen($name) >= 3){
        if (
    strlen($name) <= 60){
            if (
    preg_match("([^а-яА-Яa-zA-Z-]+)",$name)) {
                
    $err 1;
            }
            else {
                
    $err 0
            }
        } else 
    $err 2//очень длинный логин
    } else $err 3;  //очень короткий логин 
    return $err;
    }

    Как исправить?
     
  7. svesve

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

    Joined:
    15 Jun 2007
    Messages:
    574
    Likes Received:
    86
    Reputations:
    11
    есть строка вида

    Code:
    <a clas="..." href="...">info</a>, <a clas="..." href="...">info2</a>, <a clas="..." href="...">info3</a>,........
    нужно выдрать все между тегами <a></a> конструкция будет одинакова
    PHP:
    preg_match('#">(.*?)<\/a>#',$in,$out);
    , как эту конструкцию повторять,??? ведь может быть и 1 повтор и 10 повторов конструкции.
     
  8. ZnikiR

    ZnikiR Member

    Joined:
    14 Jan 2009
    Messages:
    117
    Likes Received:
    21
    Reputations:
    -5
    2 m0Hze
    У меня
    PHP:
    echo name_check('Василий'); //равно 1,т.е. ошибка.
    Может это из-за настроек денвера?
    Или я неправильно код прочита?
     
    #1048 ZnikiR, 14 Apr 2010
    Last edited: 14 Apr 2010
  9. Pashkela

    Pashkela Динозавр

    Joined:
    10 Jan 2008
    Messages:
    2,750
    Likes Received:
    1,044
    Reputations:
    339
    preg_match_all?

    2 m0Hze:
    есть такой модификатор - "i"
     
    #1049 Pashkela, 14 Apr 2010
    Last edited: 14 Apr 2010
    2 people like this.
  10. ZnikiR

    ZnikiR Member

    Joined:
    14 Jan 2009
    Messages:
    117
    Likes Received:
    21
    Reputations:
    -5
    Не могу найти его.
    Символ "i" после закрывающего ограничителя шаблона означает регистронезависимый поисК?

    Сейчас приведу код с комментариями,скажите я правильно его понял?

    PHP:
    function name_check($name){  
    $name trim($name);  
    if (
    strlen($name) >= 3){  
        if (
    strlen($name) <= 60){  
            if (
    preg_match("/^([а-яa-z\-]+)$/i",$name)) {  
                
    print_r(preg_match("/^([а-яa-z\-]+)$/i",$name));
                
    $err 1;  // ошибка:используются неразрешенные символы 
            
    }  
            else {  
                
    $err 2;   // всё супер,используються разрешенные символы
            
    }  
        } else 
    $err 3//очень длинное имя 
    } else $err 4;  //очень короткое имя   
    return $err;  
     
    #1050 ZnikiR, 14 Apr 2010
    Last edited: 14 Apr 2010
  11. Pashkela

    Pashkela Динозавр

    Joined:
    10 Jan 2008
    Messages:
    2,750
    Likes Received:
    1,044
    Reputations:
    339
    Да, но твою проблему это не решит, т.к. ты совершенно не владеешь русским языком и даже не можешь нормально сформулировать вопрос, а именно - донести, что вообще требуется от скрипта без своих мегаговнокодов, просто спросить, типо "хочу, чтобы ....., как сделать"

    Твоё "Как исправить?" никак не упрощает ситуацию

    PS: Если ми правильно протелепатировал - последний пост предыдущей страницы, иногда читать надо не только свои вопросы
     
    #1051 Pashkela, 14 Apr 2010
    Last edited: 14 Apr 2010
  12. ZnikiR

    ZnikiR Member

    Joined:
    14 Jan 2009
    Messages:
    117
    Likes Received:
    21
    Reputations:
    -5
    2 Pashkela
    Я хочу чтобы скрипт проверил состоит ли имя пользователя из
    Русских Английски букв и тире "-".
    Ну то есть,чтобы принимал Русские , Ангийские имена и имена которые пишутся через дефис "-".
    "Ван-Дер-Ваальс",но в то же время,чтобы имя нельзя было сделать из одних символов "-"

    Старался как мог.
     
  13. Deathdreams

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

    Joined:
    8 Nov 2008
    Messages:
    342
    Likes Received:
    116
    Reputations:
    5
    preg_match_all, не?
     
  14. Pashkela

    Pashkela Динозавр

    Joined:
    10 Jan 2008
    Messages:
    2,750
    Likes Received:
    1,044
    Reputations:
    339
    Вот теперь ТЗ понятное и вопросов не вызывает:

    1. Можно Русские символы
    2. Можно Английские символы
    3. Нельзя спец-символы (кроме тире)
    4. Нельзя одни только "-"
    5. Нельзя смесь русских и английских буковок
    6. Регистр любой (в любой месте ника)
    7. Длина ника от 3 до 60 символов

    PHP:
    <?php  
    $a 
    "Куку"
    if (!
    preg_match('#[^а-яА-Яa-z\-]#i',$a) && preg_match('#[а-яА-Яa-z]#i',$a) && !(preg_match('#[а-яА-Я]#',$a) && preg_match('#[a-z]#i',$a)) && strlen($a)>=&& strlen($a)<=60) echo "Ok"
    else echo 
    "Error"
    ?>
     
    #1054 Pashkela, 14 Apr 2010
    Last edited: 14 Apr 2010
    1 person likes this.
  15. ZnikiR

    ZnikiR Member

    Joined:
    14 Jan 2009
    Messages:
    117
    Likes Received:
    21
    Reputations:
    -5
    Так как это раздел, где вопросы для новичков,то решил спросить,а то понять не могу.И нигде не написано про "#"
    Чем отличается
    preg_match('#[^а-яА-Яa-z\-]#i',$a)
    от
    preg_match('/[^а-яА-Яa-z\-]/i',$a)
    И вообще я до сих пор не понял,как работает preg_match.
    Можете объяснить?
    + добавлено скрпит Пашкелы пропускает имена типа "-ыв-фы-вфыв---фыв--",что не есть хорошо.
    Попробывал так,но не сработало.
    [^а-яА-Яa-z\-?]
    Я понимаю,что регулярка понимает это как полседовательность
    от "\" до "?" ?
     
    #1055 ZnikiR, 15 Apr 2010
    Last edited: 15 Apr 2010
  16. Compton

    Compton Member

    Joined:
    31 Jan 2010
    Messages:
    290
    Likes Received:
    25
    Reputations:
    0
    если ставить '#' то не придется ставить '\' перед '/'
     
  17. svesve

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

    Joined:
    15 Jun 2007
    Messages:
    574
    Likes Received:
    86
    Reputations:
    11
    HTML:
        <td class="bold">Описание:</td>
        </tr>
        <tr class="infoRow">
        <td>Фрэнк Пеш рoдился под счастливой звeздой. Всю жизнь oн не вeдал пoражeний ни в любви, ни в уличных рaзбoрках, ни зa игoрным столом. А так кaк Фрэнк был итальянцем и жил в Нью-Йорке, жизнь постoянно прeдоставляла ему шанс проверить свою удачливость на практике. В этой гангстерской комедии есть все: смех и слезы, любовь и ненависть. Перед вашими глазами на протяжении нескольких десятилетий разворачивается история семьи Пеш со всеми ее горестями и радостями, прекрасные актерские работы не оставят равнодушными даже самого взыскательного зрителя.</td>
    
        </tr>
                <tr class="infoRow2">
        <td class="bold">В главных ролях:</td>
        </tr>
        <tr class="infoRow">
        <td><a href="actor.php?name=%D0%94%D1%8D%D0%BD%D0%BD%D0%B8%20%D0%90%D0%B9%D0%B5%D0%BB%D0%BB%D0%BE">Дэнни Айелло</a>, <a href="actor.php?name=%D0%AD%D0%BD%D1%82%D0%BE%D0%BD%D0%B8%20%D0%9B%D0%B0%20%D0%9F%D0%B0%D0%BB%D1%8C%D1%8F">Энтони Ла Палья</a></td>
        </tr>
    
    как правильно отпарсить описание??
     
  18. ZnikiR

    ZnikiR Member

    Joined:
    14 Jan 2009
    Messages:
    117
    Likes Received:
    21
    Reputations:
    -5
    В общем я написал наконец нормальную проверку имени.
    Спасибо Pashkela за код.
    В общем функция для проверки имени полязователя на валид ( правильность , валидность )
    PHP:
    if (!preg_match('#-{2,}#',$a) && //нет двух подряд тире
        
    preg_match_all('#-#',$a,$m1)<&& //И  в строке меньше 3 тире,т.е. 1 или 2
        
    !preg_match('#(^-|-$)#',$a) && //И нет тире в начале или конце
        
    !(preg_match('#[а-яА-Я]#',$a) && preg_match('#[a-z]#i',$a)) && //И не используються сразу англ и русские символы 
        
    !preg_match('#[^а-яА-Яa-z\-]#i',$a) && //И  не используються знаки кроме разрешенных {"а-я" "А-Я" "a-z" "A-Z" и "-"}
        
    strlen($a)>=&& //И имя длиннее 3 символов
        
    strlen($a)<=30 //И имя короче 30 символов
        
    )echo "Ok";
    else echo 
    "Error<br>";
    Еще Можно объядинить эти две строки
    PHP:
    !preg_match('#-{2,}#',$a)
    !
    preg_match('#(^-|-$)#',$a)
    В
    PHP:
    preg_match('#-{2,}|(^-|-$)#',$a,$m1);
     
    #1058 ZnikiR, 15 Apr 2010
    Last edited: 15 Apr 2010
  19. Compton

    Compton Member

    Joined:
    31 Jan 2010
    Messages:
    290
    Likes Received:
    25
    Reputations:
    0
    PHP:
    preg_match('/<td>(.+)<\/td>/',$text,$a);
     
  20. svesve

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

    Joined:
    15 Jun 2007
    Messages:
    574
    Likes Received:
    86
    Reputations:
    11
    такой регуляркой помимо описания ты еще кучу чего зацепишь

    спс.но я уже разобрался )
     
Thread Status:
Not open for further replies.