Функция с регуляркой

Тема в разделе "Регулярные выражения", создана пользователем Sunday, 3 дек 2012.

Статус темы:
Закрыта.
Модераторы: xpert13
  1. Sunday

    Sunday

    Регистр.:
    13 дек 2009
    Сообщения:
    724
    Симпатии:
    314
    Есть такая функция
    PHP:
    function validStr($str=""){
        
    $str trim($str);
        if(
    $str == "") return false;
        
    $str preg_replace("#(\s){2,}#umi"" "$str);
        if(!
    preg_match('#[a-zа-я0-9]#usmi'$str$matches)>0){
            return 
    false;
        }
        return 
    $str;
    }    
    Объясните пожалуйста, какие знаки, буквы, символы в конечном итоге будут разрешены? Пробел здесь разрешен?
    Я хочу разрешить пробел, дефис и подчеркивание. Правильно ли будет изменить так?
    PHP:
     if(!preg_match('#[-a-zа-я0-9_\s]#usmi'$str$matches)>0){
     
  2. Leony

    Leony

    Регистр.:
    18 мар 2008
    Сообщения:
    153
    Симпатии:
    25
    Правильно.

    trim, особенно без 2-го параметра и без регулярки пробелы режет в начале и в конце строки.

    сам паттерн – между знаками ##.
    Вне их – модификаторы:
    u – на входе символы UTF-8
    m – многострочная строка
    i – какой регистр – пофиг
    s – точка кроме любого символа, начинает захватывать и символ нов. строки

    обычные метасимволы:
    \s – таб, перевод строки или пробел
    (\s){2,} таб, перевод строки или пробел повторяется 2 и более раз
    a-z – любая латинская буква
    а-я – любая кирилическая буква
    0-9 – любая цифра
     
    xpert13 и Sunday нравится это.
Статус темы:
Закрыта.