Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Общие вопросы > Повторение букв в слове


Автор: proger 13.6.2011, 09:47
Здравствуйте, на сайте кодировка utf-8
Хочу сделать проверку формы, после того как мне послали текст, разбиваю его на слова. теперь хочу сделать запрет на повторение в слове более 4 раз одной буквы, например запрет слова фуууууууууууу и т.д.
Делал циклом по буквам, но что то с русским не очень отрабатывает. Есть ли решения, без цикла с регуляркой?

Код

function check_max_length_word($text){
    $max_kol = 25; //максимальная длина слова
    $max_sym = 4; //кол-во одинаковых символов подряд
    $text = str_replace("\n"," ",$text);//заменяем переход на новую строку
    $text = str_replace("\t"," ",$text);//заменяем табуляцию
    $str = explode(" ", $text); //разбиваем строку на слова
    for($t=0;$t<count($str);$t++){
        if ((int)mb_strlen($str[$t],"UTF-8")>$max_kol) return false;

        //в каждом слове запрещаем частое повторение символа
        $kol_repeat = 0;
        $last_sym = "";
        for ($j=0;$j<(int)mb_strlen($str[$t],"UTF-8");$j++){            
            
            if ($str[$t][$j]==$last_sym) $kol_repeat++;
            else {
                $last_sym = $str[$t][$j];
                $kol_repeat = 0;
            }
            if ($kol_repeat>=$max_sym) return false; //если много повторений
        }   

    }
    return true;
}

Автор: bars80080 13.6.2011, 13:58
Цитата(proger @  13.6.2011,  09:47 Найти цитируемый пост)
теперь хочу сделать запрет на повторение в слове более 4 раз одной буквы

считаешь, что таких слов не существует?
а как же "переселенец"?

Автор: Shogun 13.6.2011, 15:19
Цитата(bars80080 @  13.6.2011,  13:58 Найти цитируемый пост)
считаешь, что таких слов не существует?
а как же "переселенец"? 


Он наверное про то чтобы не было букв повторяющиеся подряд более 4 раз.
то-есть не "переселенец" а "пееееееееереселенец"

Код

$max_sym = 4; //кол-во одинаковых символов подрят


preg_replace_all preg_match ...

Автор: proger 13.6.2011, 19:00
Цитата(bars80080 @ 13.6.2011,  13:58)
Цитата(proger @  13.6.2011,  09:47 Найти цитируемый пост)
теперь хочу сделать запрет на повторение в слове более 4 раз одной буквы

считаешь, что таких слов не существует?
а как же "переселенец"?

Да подряд!

Добавлено через 38 секунд
Цитата(Shogun @ 13.6.2011,  15:19)
Цитата(bars80080 @  13.6.2011,  13:58 Найти цитируемый пост)
считаешь, что таких слов не существует?
а как же "переселенец"? 


Он наверное про то чтобы не было букв повторяющиеся подряд более 4 раз.
то-есть не "переселенец" а "пееееееееереселенец"

Код

$max_sym = 4; //кол-во одинаковых символов подрят


preg_replace_all preg_match ...

А можно пример?

Автор: proger 16.6.2011, 13:40
????

Автор: patap 16.6.2011, 14:32
попробуй так
Код

function check_max_length_word($text)
{
    $max_sym = 3;
    $max_len = 26;
    return ! preg_match('#([а-я])\1{'.$max_sym.'}|\w{'.$max_len.'}#ui', $text);
}

Автор: proger 17.6.2011, 08:11
Цитата(patap @ 16.6.2011,  14:32)
попробуй так
Код

function check_max_length_word($text)
{
    $max_sym = 3;
    $max_len = 26;
    return ! preg_match('#([а-я])\1{'.$max_sym.'}|\w{'.$max_len.'}#ui', $text);
}

Ок, попробую. спасибо!

Добавлено через 13 минут и 23 секунды
Цитата(patap @ 16.6.2011,  14:32)
попробуй так
Код

function check_max_length_word($text)
{
    $max_sym = 3;
    $max_len = 26;
    return ! preg_match('#([а-я])\1{'.$max_sym.'}|\w{'.$max_len.'}#ui', $text);
}

Что то с таким текстом ячсмитьбюфывкуцйапролшгнеджзхъэщшячсмитьбюфыв не отрабатывает на длину

Автор: proger 17.6.2011, 08:51
Цитата(patap @ 16.6.2011,  14:32)
попробуй так
Код

function check_max_length_word($text)
{
    $max_sym = 3;
    $max_len = 26;
    return ! preg_match('#([а-я])\1{'.$max_sym.'}|\w{'.$max_len.'}#ui', $text);
}

А если хочу сделать чтобы никакой символ не повторялся, такая конструкция 
Код

[а-яА-Яa-zA-Z0-9.!()*,_@%&?+=\~/-]
 ????

Автор: patap 17.6.2011, 09:07
Цитата(proger @  17.6.2011,  07:11 Найти цитируемый пост)
не отрабатывает на длину 

эм...да вроде все отрабатывает.
Цитата(proger @  17.6.2011,  07:51 Найти цитируемый пост)
чтобы никакой символ не повторялся

да, в этом случае нужно перечислить нужные символы в квадратных скобках, только если,  в данном случае, в набор будет входить #, то его нужно заэкранировать

Автор: proger 17.6.2011, 10:28
Цитата(patap @ 17.6.2011,  09:07)
Цитата(proger @  17.6.2011,  07:11 Найти цитируемый пост)
не отрабатывает на длину 

эм...да вроде все отрабатывает.
Цитата(proger @  17.6.2011,  07:51 Найти цитируемый пост)
чтобы никакой символ не повторялся

да, в этом случае нужно перечислить нужные символы в квадратных скобках, только если,  в данном случае, в набор будет входить #, то его нужно заэкранировать

Возможно что из за отправки данных POSTи у меня на сайте кодировка UTF-8 ?

Автор: patap 17.6.2011, 10:35
да черт его знает.. это надо пробывать, так сказать не могу. Может быть нужно файл скрипта в утф пересохранить

да и если хочешь чтобы вообще любой символ не повторялся, так будет правильнее
Код

'#(.)\1{'.$max_sym.'}|\w{'.$max_len.'}#ui'

Автор: Absinthe 17.6.2011, 10:55
Цитата

Возможно что из за отправки данных POSTи у меня на сайте кодировка UTF-8 ?
 У тебя и должна быть UTF-8.
И в заголовках, и в редактируемых файлах.

Автор: proger 17.6.2011, 11:07
Цитата(patap @ 17.6.2011,  10:35)
да черт его знает.. это надо пробывать, так сказать не могу. Может быть нужно файл скрипта в утф пересохранить

да и если хочешь чтобы вообще любой символ не повторялся, так будет правильнее
Код

'#(.)\1{'.$max_sym.'}|\w{'.$max_len.'}#ui'

Спасибо! щас с кодировкой посмотрю!

Добавлено через 4 минуты и 19 секунд
Цитата(Absinthe @ 17.6.2011,  10:55)
Цитата

Возможно что из за отправки данных POSTи у меня на сайте кодировка UTF-8 ?
 У тебя и должна быть UTF-8.
И в заголовках, и в редактируемых файлах.

Проверил. так и есть!

Добавлено через 5 минут и 16 секунд
Цитата(patap @ 17.6.2011,  10:35)
да черт его знает.. это надо пробывать, так сказать не могу. Может быть нужно файл скрипта в утф пересохранить

да и если хочешь чтобы вообще любой символ не повторялся, так будет правильнее
Код

'#(.)\1{'.$max_sym.'}|\w{'.$max_len.'}#ui'

Код

return ! preg_match('#([а-я])\1{'.$max_sym.'}|\w{'.$max_len.'}#ui', "ячсмитьбюфывкуцйапролшгнеджзхъэщшячсмитьбюфыв");

возвращает true а должен false

Автор: proger 20.6.2011, 11:04
?????

Автор: patap 20.6.2011, 12:39
все в утэфу, все работает. 
Код

<?php
    header('Content-type: text/html; charser=utf-8');
    
    function check_max_length_word($text)
    {
        $max_sym = 3;
        $max_len = 26;
        return ! preg_match('#(.)\1{'.$max_sym.'}|\w{'.$max_len.'}#ui', $text);
    }
    
    if (isset($_POST['data']))
    {
        $res = check_max_length_word($_POST['data']);
        var_dump($res);
    }

?><html>
<head>
    <meta http-equiv="content-type" content="text/html; charset=utf-8" />
</head> 
<body>
    <form action="1.php" method="post">
        <input type="text" name="data" size="100" />
        <input type="submit" value="Check" />
    </form>
</body>
</html>

Автор: proger 22.6.2011, 07:32
Цитата(patap @ 20.6.2011,  12:39)
все в утэфу, все работает. 
Код

<?php
    header('Content-type: text/html; charser=utf-8');
    
    function check_max_length_word($text)
    {
        $max_sym = 3;
        $max_len = 26;
        return ! preg_match('#(.)\1{'.$max_sym.'}|\w{'.$max_len.'}#ui', $text);
    }
    
    if (isset($_POST['data']))
    {
        $res = check_max_length_word($_POST['data']);
        var_dump($res);
    }

?><html>
<head>
    <meta http-equiv="content-type" content="text/html; charset=utf-8" />
</head> 
<body>
    <form action="1.php" method="post">
        <input type="text" name="data" size="100" />
        <input type="submit" value="Check" />
    </form>
</body>
</html>

При слове ячсмитьбюфывкуцйапролшгнеджзхъэщшячсмитьбюфыв результат неверный, пишит true

Автор: patap 22.6.2011, 09:01
false  smile 

Автор: proger 23.6.2011, 14:35
Цитата(patap @ 22.6.2011,  09:01)
false  smile

вот http://krg54.kz/test.php

Автор: proger 28.6.2011, 10:17
?????

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)