Модераторы: Aliance, skyboy, MoLeX, ksnk
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Фильтр одного языка, рус/англ 
:(
    Опции темы
quiz2
Дата 13.2.2006, 13:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 1
Регистрация: 13.2.2006

Репутация: нет
Всего: нет



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

Спасибо

Это сообщение отредактировал(а) quiz2 - 13.2.2006, 13:35
PM MAIL   Вверх
AztEK
Дата 13.2.2006, 14:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 723
Регистрация: 4.1.2005

Репутация: нет
Всего: 18



Регулярные выражения. Читай про них и соответсвующий форум.


--------------------
Linux is like wigwam -- no windows, no gates, apache inside.
PM MAIL Jabber   Вверх
AntonioBanderaz
Дата 13.2.2006, 17:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Velichko Anton
**


Профиль
Группа: Участник
Сообщений: 851
Регистрация: 28.4.2005
Где: Санкт-Петербург

Репутация: нет
Всего: 18



да можно и str_replace

Код

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



--------------------
ГЫ... 
PM MAIL ICQ   Вверх
AztEK
Дата 13.2.2006, 19:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 723
Регистрация: 4.1.2005

Репутация: нет
Всего: 18



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


--------------------
Linux is like wigwam -- no windows, no gates, apache inside.
PM MAIL Jabber   Вверх
AntonioBanderaz
Дата 14.2.2006, 16:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Velichko Anton
**


Профиль
Группа: Участник
Сообщений: 851
Регистрация: 28.4.2005
Где: Санкт-Петербург

Репутация: нет
Всего: 18



Цитата(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 "Только один язык и пробел";


Это сообщение отредактировал(а) AntonioBanderaz - 14.2.2006, 17:00


--------------------
ГЫ... 
PM MAIL ICQ   Вверх
AztEK
Дата 15.2.2006, 13:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 723
Регистрация: 4.1.2005

Репутация: нет
Всего: 18



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


--------------------
Linux is like wigwam -- no windows, no gates, apache inside.
PM MAIL Jabber   Вверх
AntonioBanderaz
Дата 15.2.2006, 17:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Velichko Anton
**


Профиль
Группа: Участник
Сообщений: 851
Регистрация: 28.4.2005
Где: Санкт-Петербург

Репутация: нет
Всего: 18



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

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


--------------------
ГЫ... 
PM MAIL ICQ   Вверх
AztEK
Дата 16.2.2006, 05:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 723
Регистрация: 4.1.2005

Репутация: нет
Всего: 18



Давай. Как замерием? Тупо прогоним цикл 10000 раз?


--------------------
Linux is like wigwam -- no windows, no gates, apache inside.
PM MAIL Jabber   Вверх
$дмитрий
Дата 16.2.2006, 10:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1037
Регистрация: 19.6.2004

Репутация: 2
Всего: 45



Цитата

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

Код

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

PM MAIL   Вверх
AntonioBanderaz
Дата 16.2.2006, 16:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Velichko Anton
**


Профиль
Группа: Участник
Сообщений: 851
Регистрация: 28.4.2005
Где: Санкт-Петербург

Репутация: нет
Всего: 18



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

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


--------------------
ГЫ... 
PM MAIL ICQ   Вверх
AztEK
Дата 16.2.2006, 19:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 723
Регистрация: 4.1.2005

Репутация: нет
Всего: 18



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


--------------------
Linux is like wigwam -- no windows, no gates, apache inside.
PM MAIL Jabber   Вверх
AntonioBanderaz
Дата 18.2.2006, 19:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Velichko Anton
**


Профиль
Группа: Участник
Сообщений: 851
Регистрация: 28.4.2005
Где: Санкт-Петербург

Репутация: нет
Всего: 18



Код

<?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

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

Это сообщение отредактировал(а) AntonioBanderaz - 18.2.2006, 19:29


--------------------
ГЫ... 
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Тексты | Следующая тема »


 




[ Время генерации скрипта: 0.0798 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.