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


Автор: quiz2 13.2.2006, 13:34
Приветсвую всех.
Расскажите, пожалуйста, как сделать проверку имени пользователя при регистрации, чтоб в нем содержались буквы только одного языка?
Если есть разные языки, то регистрация не удается. Если только рус или англ, то норм. При этом помимо букв можно использовать еще и пробел.

Спасибо

Автор: AztEK 13.2.2006, 14:53
Регулярные выражения. Читай про них и соответсвующий форум.

Автор: AntonioBanderaz 13.2.2006, 17:34
да можно и str_replace

Код

str_replace(Array('a','b',...,'Z'), '', $str); //тоже и для русского

Автор: AztEK 13.2.2006, 19:23
Причем тут str_replace?
Как я понял, необходимо проверить входные данные, чтобы буквы были из одного языка.
Это делается регекспами

Автор: AntonioBanderaz 14.2.2006, 16:51
Цитата(quiz2 @ 13.2.2006, 13:34 Найти цитируемый пост)
Приветсвую всех.
Расскажите, пожалуйста, как сделать проверку имени пользователя при регистрации, чтоб в нем содержались буквы только одного языка?
Если есть разные языки, то регистрация не удается. Если только рус или англ, то норм. При этом помимо букв можно использовать еще и пробел.


А теперь смотрим что получится если использовать str_replace

Код

if(strlen($login) != strlen(str_replace(Array('a','б',...,'Я'), '', $login)) || strlen(str_replace(Array('a','б',...,'Я'), '', $login)) > 1) //типо если длина логина после замены сиволов какого-то конкретного языка на null то выход
      echo "Только один язык и пробел";

Автор: AztEK 15.2.2006, 13:05
Извращение! Неэлегантно, и, должно быть, небыстро.

Автор: AntonioBanderaz 15.2.2006, 17:19
Цитата(AztEK @ 15.2.2006, 13:05 Найти цитируемый пост)
небыстро.

А давай проверим?

Автор: AztEK 16.2.2006, 05:39
Давай. Как замерием? Тупо прогоним цикл 10000 раз?

Автор: $дмитрий 16.2.2006, 10:24
Цитата

чтоб в нем содержались буквы только одного языка?

Код

echo preg_replace("#^[a-zа-я]+$#i","string")?'ok':'no';

Автор: AntonioBanderaz 16.2.2006, 16:22
Цитата(AztEK @ 16.2.2006, 05:39 Найти цитируемый пост)
Давай. Как замерием? Тупо прогоним цикл 10000 раз?

давай так... завтра скину результаты... Машинка P4 1.7 512Mb ОЗУ php 4.4 Apache 2 OC RedHat Linux AS Taroon update 4

Автор: AztEK 16.2.2006, 19:54
Ладно, давай.
Добавлено @ 19:56
Тогда скинь ещё и тестируемый код.

Автор: AntonioBanderaz 18.2.2006, 19:22
Код

<?php
function isOneLang($str) {
    $str = str_replace(array(1,2,3,4,5,6,7,8,9,0,' '), '', $str);
    $replace = array('q','w','e','r','t','y','u','i','o','p','a','s','d','f','g','h','j','k','l','z','x','c','v','b','n','m');
    $repl = str_replace($replace, '', $str);
    
    $n = strlen($str);
    $m = strlen($repl);
    
    if($n > $m && $m != 0) return 0;
    elseif($n == $m || $m == 0) return 1;
}


$str = 'tretretertertert 56456456 парпарпарпарпарап 6756756 авповарполр ghfhgfhgfропоаывпаыволавп';
$m = 0;
for($i = 0, $_tmp = 0; $i < 10000; $i++) {
    $_tmp = microtime();
    isOneLang($str);
    $m += microtime() - $_tmp;
}
echo $m / 10000;
?>


Вывел: 9.03182E-005

А что там у тебя?

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