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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Обработки строк 
:(
    Опции темы
Aliance
Дата 8.4.2006, 18:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


I ♥ <script>
****


Профиль
Группа: Модератор
Сообщений: 6418
Регистрация: 2.8.2004
Где: spb

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



Всем привет.

У меня возникла задача: необходимо проверить введенные пользователем данные в форуме на стороне сервера.

• Нужно проверить e-mail на валидность. Не подскажите как?
Прочел эти темы:
http://forum.vingrad.ru/index.php?showtopic=46596
http://forum.vingrad.ru/index.php?showtopic=55191&st=40
http://forum.vingrad.ru/index.php?showtopic=76143

Там больше спора, чем готового сформулированного ответа :-)

Кстати, что вы думаете на счет этого:
http://community.livejournal.com/ru_progra...html?mode=reply

• нужно проверить дату на правильность. Я так понимаю, что нужно использовать функцию checkdate(), но там аргументы идут не в том порядке (мм, чч, гггг), в котором моя строка. Опять же, видимо, нужно регами строку привести к нужному виду?! Моя строка вида
гггг/мм/чч. Хотя при желании могу ее изменить на мм, чч, гггг, имхо, юзерам проще водить не в таком формате.

• проверить значение, на содержание в нем только чисел

• проверить с помощью регулярок на наличие любого символа в строке
Я так понимаю это [\w+] ?
PM MAIL WWW ICQ Skype   Вверх
ZlojEzh
Дата 8.4.2006, 19:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 285
Регистрация: 8.10.2005
Где: Киев, Украина

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



1) уточни: проверить только представление емейла или точно узнать существует ли такой ящик?
2) если проверять просто формат:
Код

preg_match("#\d{4}/\d{2}/\d{2}#")

чтоб проверить существование такой даты:
Код

list{$year,$month,$day} = explode('/',$value);
if (checkdate($month, $day, $year)) {
  print "date correct\n";
} else {
  print "date incorrect\n";
}

3)
Код

preg_match("#^\d+$#",$value)

4)
Цитата(Aliance @ 8.4.2006, 18:58 Найти цитируемый пост)
наличие любого символа в строке

можешь не проверять - если она не пустая, то какой-то символ там есть ))
вообщем вопрос я не понял ))
вариант [\w+] - это вряд ли (означает один символ, образующий слово, или плюс)
скорее всего ты имел ввиду [\w]+ - один или более "словесных" символов
PM MAIL ICQ   Вверх
Aliance
Дата 8.4.2006, 20:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


I ♥ <script>
****


Профиль
Группа: Модератор
Сообщений: 6418
Регистрация: 2.8.2004
Где: spb

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



Цитата(ZlojEzh @ 8.4.2006, 20:44 Найти цитируемый пост)
) уточни: проверить только представление емейла или точно узнать существует ли такой ящик?

Первое. Именно формат smile

Цитата(ZlojEzh @ 8.4.2006, 20:44 Найти цитируемый пост)
скорее всего ты имел ввиду [\w]+ - один или более "словесных" символов

Я пока ничего не имел ввиду, этот отрывок я взял с топика, ссылку на который дал выше от участника PARROT :-) И это только догадка...

Спасибо за ответы, в общем и целом помог. Надеюсь дашь ответ и на оставшиеся вопросы smile
PM MAIL WWW ICQ Skype   Вверх
ZlojEzh
Дата 8.4.2006, 20:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 285
Регистрация: 8.10.2005
Где: Киев, Украина

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



тот длиннющий регексп для валидации емейла - изврат страшный
но именно так он и приведен в каком-то rfc (номер не помню)
использовать его для проверки введенных пользователем данных вряд ли стоит
сдается мне, что скорость такого рега оставляет желать лучшего

а вообще, сколько программеров - столько и вариаций проверки емейла
я вот сейчас такой накатал (правда не тестил):
#^[\w\d][\w\d_-]*@([\w\d][\w\d\_-]+\.)+[\w\d]{2,4}$#



а последний пункт объясни, все таки, по-подробнее
а то я совсем вопрос не понял (уж больно меня смутила фраза "наличие любого символа")
PM MAIL ICQ   Вверх
CyClon
Дата 8.4.2006, 20:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Код
<?php

/* Mail check go */

function mail_check($email)
{
    if (preg_match("#^[a-zA-Z0-9_.\-]{3,50}@[a-zA-Z0-9.\-]+\.[a-zA-Z]{2,5}$#", $email)) {
        return 1;
    } else {
        return 0;
    }
}

echo (mail_check("[email protected]")) ? "Address is valid!" : "Sorry, invalid email address...";

/* Date check go */

function date_check($date)
{
    $temp1 = explode(".", $date);
    $temp2 = explode("/", $date);
    if (sizeof($temp1) == 3 || sizeof($temp2) == 3) {
        return 1;
    } else {
        return 0;
    }
}

echo (date_check("08/04/2006")) ? "Date is valid!" : "Date is invalid, sorry...";

/* Value is number check */

echo (is_numeric("72637812")) ? "String is number" : "Stirng is string...";

/* StrLen check */

echo (strlen("g") > 0)) ? "StrLen > 0, all ok" : "Error, string is null";

?>


Написал, но не проверял. Сервер что-то прилег...
Добавлено @ 20:33
Ребята, зачем гонять регулярки для проверки на пустоту строки, если можно воспользоваться strlen? Зачем их гонять для проверки число/не число, если можно использовать is_numeric?


--------------------
user posted image
PM   Вверх
Ciber SLasH
Дата 9.4.2006, 00:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Вот ещё "мыльный" рег (взял из книжки):
Код

$e_mail_1 = '[email protected]';
$e_mail_2 = '[email protected]';
if (preg_match("/^([-\w\d._]+@[-\w\d.]+(\.[-\w\d]+)+)*$/", $e_mail_2)) echo 'Мыло "'.$e_mail_2.'" прошло проверку.';
else echo 'Мыло "'.$e_mail_2.'" НЕ прошло проверку !!';


Это сообщение отредактировал(а) Ciber SLasH - 9.4.2006, 00:08
PM   Вверх
ZlojEzh
Дата 9.4.2006, 00:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 285
Регистрация: 8.10.2005
Где: Киев, Украина

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



Код

Мыло "[email protected]" прошло проверку.
Мыло "[email protected]" прошло проверку.

что-то тут не так...
PM MAIL ICQ   Вверх
Ciber SLasH
Дата 9.4.2006, 01:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Вот тут хорошие ссылки: http://forum.vingrad.ru/index.php?showtopic=75770
Вот ещё рег (взят со страницы по ссылки и переделан):
Код

$e_mail1 = '[email protected]';
$e_mail2 = '[email protected]';
$e_mail3 = '_@_.xx';
$reg1 = '#((?:\w|\d){1}(?:\w|\d|\-|_|\.|\+)+?(?:\w|\d){1}@(?:(?:\w|\d){1,}(?:\-|\.){0,1}(?:\w|\d){1,})+?\.(?:\w){2,4})#';
$reg2 = '#([\w\d][\w\d\-_\.\+]*?@(?:[\w\d]+[\-\.]?[\w\d]+)+?\.\w{2,4})#';
echo 'Мыло "'.$e_mail2.(preg_match($reg2, $e_mail2) ? '"' : '" <b>НЕ</b>').' прошло проверку.';


Это сообщение отредактировал(а) Ciber SLasH - 9.4.2006, 01:26
PM   Вверх
Aliance
Дата 9.4.2006, 16:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


I ♥ <script>
****


Профиль
Группа: Модератор
Сообщений: 6418
Регистрация: 2.8.2004
Где: spb

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



ZlojEzh, это значит в строке присутствует любой символ, кроме пробела. Думаю $str !== "" будет достаточно.
CyClon, Ciber SLasH, спасибо. пошел тестировать.
PM MAIL WWW ICQ Skype   Вверх
ZlojEzh
Дата 9.4.2006, 20:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 285
Регистрация: 8.10.2005
Где: Киев, Украина

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



Цитата(Aliance @ 9.4.2006, 16:25 Найти цитируемый пост)
Думаю $str !== "" будет достаточно.

если кроме пробела, то надо делать так
Код

 if (trim($str)!='')




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


 




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


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

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