Модераторы: korob2001, ginnie

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> регулярные выражения 
:(
    Опции темы
Burdin
Дата 8.7.2005, 00:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



SantaXP

у тебя выдает ошибку потому-что
Код

if (($nick =~ /^[a-zA-Z0-9_]/)    
#^^^^^^^ убери одну скобку (
{print qq(    
<td align="center" width=67%>    
All in normal!    
</td>);}    
else    
{print qq(    
<td align="center" width=67%>    
Go fuck yourself!    
</td>);}

PM MAIL WWW ICQ   Вверх
korob2001
Дата 8.7.2005, 05:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2871
Регистрация: 29.12.2002

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



Цитата

у тебя выдает ошибку потому-что

SantaXP - Потому что, нужно писать читабельный код, что бы в нём разобраться, ниже я отформатировал твой код, теперь сравни: В каком варианте код легче читать да и вообще поддерживать его?

В данном коде:
Код

if ( $nick =~ /^[a-zA-Z0-9_]/ ) {
     print qq(<td align="center" width="67%">All in normal!</td>);
} else {
     print qq(<td align="center" width=67%>Go fuck yourself!</td>);
}

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

/^[a-zA-Z0-9_]+$/

У него же условие стоит такое: если строка состоит из данных символов, все ОК, если нет - проблема. Потому отрицание здесь не нужно, а так же необходим +, так как мы же проверяем не только первый символ, для полноты ещё и символ конца строки.

Удачи.

Это сообщение отредактировал(а) korob2001 - 8.7.2005, 05:09


--------------------
"Время проходит", - привыкли говорить вы по неверному пониманию. 
"Время стоит - проходите вы".
PM MAIL WWW ICQ MSN   Вверх
Burdin
Дата 8.7.2005, 05:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



а как тогда проверить на все запрещенные символы
PM MAIL WWW ICQ   Вверх
korob2001
Дата 8.7.2005, 05:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2871
Регистрация: 29.12.2002

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



Код

$nick !~ /^[a-zA-Z0-9_]+$/

Если встретятся символы, которые мы не указали, условие вернёт TRUE, значит ошибка.
Т.е. если бы у него была проверка такого плана: если в строке обнаружен недопустимый символ, значит ОШИБКА, если в строке все символы допустимы - значит всё ОК.
Тогда это условие будет выглядеть так:
Код

if ( $nick !~ /^[a-zA-Z0-9_]+$/ ) {
     print qq(<td align="center" width="67%">Go fuck yourself!</td>);
} else {
     print qq(<td align="center" width="67%">All in normal!</td>);
}

В его же случае оно должно выглядеть так:
Код

if ( $nick =~ /^[a-zA-Z0-9_]+$/ ) {
     print qq(<td align="center" width="67%">All in normal!</td>);
} else {
     print qq(<td align="center" width="67%">Go fuck yourself!</td>);
}


Это сообщение отредактировал(а) korob2001 - 8.7.2005, 05:25


--------------------
"Время проходит", - привыкли говорить вы по неверному пониманию. 
"Время стоит - проходите вы".
PM MAIL WWW ICQ MSN   Вверх
Burdin
Дата 8.7.2005, 05:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



ну и что получается в твоем варианте пропускает а в моем нет

Код

#!/usr/bin/perl
$nick ="ssвася иди тыqwe";
# твой
if ( $nick =~ /^[^a-zA-Z0-9_]+$/ ) {
     print qq(Go fuck yourself!\n);
} else {
     print qq(All in normal!\n);
}
#мой
if ( $nick =~ /[^a-zA-Z0-9_]/ ) {
     print qq(Go fuck yourself!\n);
} else {
     print qq(All in normal!\n);
}

Вот ответ:
Код

All in normal!
Go fuck yourself!

PM MAIL WWW ICQ   Вверх
korob2001
Дата 8.7.2005, 05:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2871
Регистрация: 29.12.2002

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



Уже подправил, посмотри последнее сообщение ещё раз.


--------------------
"Время проходит", - привыкли говорить вы по неверному пониманию. 
"Время стоит - проходите вы".
PM MAIL WWW ICQ MSN   Вверх
korob2001
Дата 8.7.2005, 05:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2871
Регистрация: 29.12.2002

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



Хотя наверное отрицание, будет выглядеть более разумным если записатьего так:
Код

#!/usr/bin/perl -w
use strict;
my $nick = "45gfd,45fd_";

unless ( $nick =~ /^[a-zA-Z0-9_]+$/ ) {
     print qq(<td align="center" width="67%">Go fuck yourself!</td>);
} else {
     print qq(<td align="center" width="67%">All in normal!</td>);
}

Теперь если отрицание не нужно, достаточно только заменить unless на if


--------------------
"Время проходит", - привыкли говорить вы по неверному пониманию. 
"Время стоит - проходите вы".
PM MAIL WWW ICQ MSN   Вверх
Burdin
Дата 8.7.2005, 05:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



ну вот ты мне обьясни на этом примере???

Код

#!/usr/bin/perl    
$nick ="ssвася иди тыqwe";    
# твой    
if ( $nick =~ /^[a-zA-Z0-9_]+$/ ) {    
     print qq(Go fuck yourself!\n);    
} else {    
     print qq(All in normal!\n);    
}    
#мой    
if ( $nick =~ /[^a-zA-Z0-9_]/ ) {    
     print qq(Go fuck yourself!\n);    
} else {    
     print qq(All in normal!\n);    
}

почему в первом говорит All in normal!
а во втором Go fuck yourself!
PM MAIL WWW ICQ   Вверх
korob2001
Дата 8.7.2005, 07:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2871
Регистрация: 29.12.2002

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



Код

#!/usr/bin/perl
$nick ="ssвася иди тыqwe";

# Здесь проверка на то, что все символы в строке должны быть либо цифрами, либо символами латинского алфавита,
# либо символами подчеркивания, таких символов может быть сколько угодно, но как минимум 1.
# Так как в строке есть символы пробела и кирилица, значит условие будет ЛОЖНЫМ,
# потому выполняется блок ELSE. По идее, при данной проверке в блоке ELSE и в блоке IF нужно поменять местами строки.
if ( $nick =~ /^[a-zA-Z0-9_]+$/ ) {
     print qq(Go fuck yourself!\n);
} else {
     print qq(All in normal!\n);
}

# Здесь ты проверяешь, что $nick содержит не символы латиского алфавит, не символы подчёркивания и не цифры
# такак как в строке есть символы пробела и кирилица, значит твоё условие вернёт TRUE и выполнится блок IF
if ( $nick =~ /[^a-zA-Z0-9_]/ ) {
     print qq(Go fuck yourself!\n);
} else {
     print qq(All in normal!\n);
}



--------------------
"Время проходит", - привыкли говорить вы по неверному пониманию. 
"Время стоит - проходите вы".
PM MAIL WWW ICQ MSN   Вверх
sharq
Дата 8.7.2005, 09:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Perl Liker
**


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

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



Что-то вы здесь пургу развели...

Что это за логин: с пробелами и русскими буквами??? Хотя смотря какая задача стоит...

Вот аффтору нужно наличие только латинских букв, цифр и _. Всё!
Никаких пробелов и русских букв тем более!!!

Для логина и пароля:
Код

$nick =~ /[^a-zA-Z0-9_]/


Для мыла я уже писал, еще раз:
Код

$email =~ /^[a-zA-Z_\.\-\d]+\@[a-zA-Z\.\-\d]+\.[a-zA-Z]{2,4}$/


Какие еще могут быть проблемы?


--------------------
[color=gray]There's More Than One Way To Do It[/color]
PM MAIL WWW ICQ Skype   Вверх
korob2001
Дата 8.7.2005, 15:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2871
Регистрация: 29.12.2002

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



sharq - да мы тут о регулярных выражениях поговорили. smile


--------------------
"Время проходит", - привыкли говорить вы по неверному пониманию. 
"Время стоит - проходите вы".
PM MAIL WWW ICQ MSN   Вверх
SantaXP
Дата 8.7.2005, 23:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



sharq
Хе... Именно её я и перечитываю постоянно... smile Спасибо...
PM MAIL   Вверх
sharq
Дата 9.7.2005, 00:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Perl Liker
**


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

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



А я читаю и понять не могу, о чем посты. smile


SantaXP разабрался?


--------------------
[color=gray]There's More Than One Way To Do It[/color]
PM MAIL WWW ICQ Skype   Вверх
korob2001
Дата 9.7.2005, 08:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2871
Регистрация: 29.12.2002

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



sharq - смысл у этих постов ничуть не меньше, чем в тех постах, конторые написал ты. Про E-mail я вообще молчу, потому как следующие адреса, твоё выражение очень даже пропустит:
[email protected]
[email protected]
----------@------------ru


--------------------
"Время проходит", - привыкли говорить вы по неверному пониманию. 
"Время стоит - проходите вы".
PM MAIL WWW ICQ MSN   Вверх
sharq
Дата 9.7.2005, 13:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Perl Liker
**


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

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



korob2001 да спасибо за косяк, но твой вариант не прокатит, т.к. в моей проверке проверяется еще первый символ. Если заменить первый сивол на любой, то надо исправлять...

НО потестил на mail'e и такие варианты хляют:
[email protected]
[email protected]
[email protected]

Самоге главное чтобы не начиналась с точки, _, - и не заканчивались точкой или _.

Так что в моем варианте проверки скрипта необходимо исправить проверку домена и последнего символа в имени.
Вот такие пока хляют:
[email protected]
[email protected]

Но на самом деле в своей регистрации я отсылаю письмо на мыло, если ввели несуществующий адрес, то полная регистрация произведена не будет.


Цитата
смысл у этих постов ничуть не меньше, чем в тех постах, конторые написал ты.

все-таки обижаться не стоит smile





--------------------
[color=gray]There's More Than One Way To Do It[/color]
PM MAIL WWW ICQ Skype   Вверх
Страницы: (3) Все 1 [2] 3 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Perl: CGI программирование"
korob2001
sharq
  • В этом разделе обсуждаются вопросы относящиеся только к CGI программированию
  • Если ваш вопрос не относится к системному или CGI программированию, задавайте его в общем разделе
  • Если ваш вопрос относится к системному программированию, задавайте его здесь
  • Интерпретатор Perl можно скачать здесь ActiveState, O'REILLY, The source for Perl
  • Справочное руководство "Установка perl-модулей", качать здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, korob2001, sharq.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Perl: разработка для Web | Следующая тема »


 




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


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

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