Forum Webscript.Ru

Программирование => Perl => Тема начата: Dart Sidius от 09 Апреля 2003, 03:39:33

Название: Шаблон
Отправлено: Dart Sidius от 09 Апреля 2003, 03:39:33
Народ кто-нить знает как наюзать шаблон для проверки в переменной смеси русских и латинских букв...я знаю как это сделать несколькими if\'ами...:

if ($var=~ /[a-zA-Z]/) {
         if ($var=~ /[^a-zA-Z]/) {
                   if ($var=~ /[^a-zA-Z0-9_\\ \\-]/) {
                         print "В ввели смесь русских и латинских букв";
                   }
         }
}

...так вот у меня такая проблема...мне нужно чтобы эта проверка было в одном шаблоне, одним if\'ом
Название: Шаблон
Отправлено: NCRangeR от 09 Апреля 2003, 06:39:55
Dart Sidius
можно как-то так:
$var =~ /(([a-zA-Z].*[а-яА-Я])|([а-яА-Я].*[a-zA-Z]))/
Название: Шаблон
Отправлено: Phoinix от 09 Апреля 2003, 10:02:40
Цитировать
if ($var=~ /[a-zA-Z]/) {
         if ($var=~ /[^a-zA-Z]/) {
                   if ($var=~ /[^a-zA-Z0-9_ -]/) {
                         print "В ввели смесь русских и латинских букв";
                   }
         }
}


Или так...

if (($var=~ /[a-zA-Z]/) && ($var=~ /[^a-zA-Z]/) && ($var=~ /[^a-zA-Z0-9_ -]/)) {
                         print "В ввели смесь русских и латинских букв";
}
Название: Шаблон
Отправлено: Dart Sidius от 09 Апреля 2003, 14:01:20
Цитировать
Phoinix:
if ($var=~ /[a-zA-Z]/) {
if ($var=~ /[^a-zA-Z]/) {
if ($var=~ /[^a-zA-Z0-9_ -]/) {
print "В ввели смесь русских и латинских букв";
}
}
}

Или так...

if (($var=~ /[a-zA-Z]/) && ($var=~ /[^a-zA-Z]/) && ($var=~ /[^a-zA-Z0-9_ -]/)) {
print "В ввели смесь русских и латинских букв";
}

Да такой тупости ни разу не видел...я же просил одним шаблоном, а ты тупо слил всё....в одну строку
Название: Шаблон
Отправлено: NCRangeR от 10 Апреля 2003, 05:26:41
Dart Sidius
а чем тебе
$var =~ /(([a-zA-Z].*[а-яА-Я])|([а-яА-Я].*[a-zA-Z]))/
не подходит? ;) вроде работает!
даже локаль вроде настраивать не надо..
Название: Шаблон
Отправлено: Dart Sidius от 10 Апреля 2003, 07:15:17
Цитировать
NCRangeR:
а чем тебе
$var =~ /(([a-zA-Z].*[а-яА-Я])|([а-яА-Я].*[a-zA-Z]))/
не подходит?  вроде работает!
даже локаль вроде настраивать не надо..

Да не это как раз гуд...за чё те большое спасибо...меня просто добивает тупость некоторых людей...вот и всё
Название: Шаблон
Отправлено: Xander от 10 Апреля 2003, 07:20:07
Dart Sidius
Это не их тупость, ага?

[off]тебе предложили лучшее решение, чем ты сделал сам, если ты не заметил.[/off]
Название: Шаблон
Отправлено: NeoNox от 10 Апреля 2003, 11:13:49
moderator
Dart Sidius не стоит переходить на личности в данном форуме. Предупреждение.
Название: Шаблон
Отправлено: scalar от 10 Апреля 2003, 16:00:07
2Dart Sidius
Как-то на одном форуме (Perl форуме) я увидел тему “Учите перловку ламеры” и в этой теме был один ответ всего один ответ “Учитесь вежливости хамё”

Вот ИМХО правильный ответ на ваш вопрос (хотя символ | разделяет альтернативные шаблоны То есть их фактически два , шаблона ДОБАВИЛ третий)

$_="q";

unless(/(?:^[^А-Яа-яЁё]*[A-Za-z][^А-Яа-яЁё]*$)|(?:^[^A-Za-z]*[А-Яа-яЁё][^A-Za-z]*$)/)
{
   print "ВЫ ввели смесь русских и латинских букв";
}

работает правильно даже при анализе одной буквы Но таким методом могут пользоваться либо Аристократы либо Дегенераты ИМХО

Судя по всему вы Dart Sidius не Аристократ
Тогда если вы не дегенерат вам придётся пользоваться

$_=\'qы\';

if(/[A-Za-z]/ && /[А-Яа-яЁё]/)
{
   print "ВЫ ввели смесь русских и латинских букв";
}
Название: Шаблон
Отправлено: Mog. от 10 Апреля 2003, 18:37:21
А просто  [A-Za-zА-Яа-яЁё] не покатит?
Название: Шаблон
Отправлено: Alone от 10 Апреля 2003, 18:44:48
нет конечно из-за "ВЫ ввели смесь русских и латинских букв" :)
Название: Шаблон
Отправлено: Mog. от 10 Апреля 2003, 18:59:55
Меня интересует, есть ли принципиальная разница между
/[A-Za-z]/ && /[А-Яа-яЁё]/    и    /[A-Za-zА-Яа-яЁё]/
Название: Шаблон
Отправлено: Xander от 10 Апреля 2003, 19:05:23
Mog.
Есть.
Первое требует наличия обоих условий, а второе их объединяет.
Так что второе съест с равным успехом и кириллицу и латиницу, и смесь, чего явно не нужно.
Название: Шаблон
Отправлено: Mog. от 10 Апреля 2003, 19:15:55
Xander т.е. это скорее "или" ?
Название: Шаблон
Отправлено: Xander от 10 Апреля 2003, 23:13:10
Mog.
[...] объявляет класс символов. Подходит любой символ, включенный в этот класс.
Так что это совершенно точно ИЛИ.
Название: Шаблон
Отправлено: Yaroslav от 24 Декабря 2004, 11:57:11
в продолжение темы вопросик (далеко ли меня пошлют читать?) :)
если разрешенны для ввода латинские, русские символы и цыфры
почему так не работает ($login !~ /^[a-z0-9а-я]+$/i)
а так работает ($login !~ /^[a-zа-я0-9]+$/i)
Название: Шаблон
Отправлено: NeoNox от 24 Декабря 2004, 12:09:50
Цитировать
Yaroslav:
(далеко ли меня пошлют читать?)

не очень
perldoc perlre

Очень помогает для понимания что происходит в механизме регекспа такая прагма:
use re \'debug\';
Поставь в скрипте и смотри что происходит.
Название: Шаблон
Отправлено: Green Kakadu от 24 Декабря 2004, 21:16:39
Цитировать
Yaroslav:
 ввода латинские, русские символы и цыфры почему так не работает ($login !~ /^[a-z0-9а-я]+$/i) а так работает ($login !~ /^[a-zа-я0-9]+$/i)

а почему бы не использовать просто

if($login=~/\\W/){print "недопустимые символы"}

[OFF]с включенной локалью[/OFF]
Название: Шаблон
Отправлено: Yaroslav от 26 Декабря 2004, 17:33:20
Green Kakadu
боюсь что списочек очень большой получится...
вдруг что то внести туда забуду? и накорется скрипт в самый неподходящий момент...