The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

форумы  помощь  поиск  регистрация  майллист  ВХОД  слежка  RSS
"Друзья, помогите с регулярным выражением."
Вариант для распечатки  
Пред. тема | След. тема 
Форумы WEB технологии (Public)
Изначальное сообщение [Проследить за развитием треда]

"Друзья, помогите с регулярным выражением."  
Сообщение от DMAAMD email(ok) on 21-Мрт-07, 21:16 
Помогите составить регулярное выражение для проверки правильности ввода ID абонента в терминалах оплаты.

Дано:
У каждого абонента имеется ID из 8 цифр от (0-9)
На пример: 17070217
Последние 2 цифры это сумма 6 предидущих. То есть: 1+7+0+7+0+2=17
Если сумма не двузначное число то добаляется то перед ней добавляется 0.
На пример: 11111106

Надо написать регулярное выражение по которому оператор терминалов будет проверят следующее:
1. ID содержит ровно 8 цифр от 0 до 9.
2. Последние 2 цифры это сумма 6 предидущих.

Оператор в качестве примера прислал мол дайте регулярное выражение типа: ^\d{2,10}$ для проверки правильности ввода ID.

Помогите пожалуйста.
Зарание благодарен.

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

 Оглавление

Сообщения по теме [Сортировка по времени, UBB]


1. "Друзья, помогите с регулярным выражением."  
Сообщение от A on 22-Мрт-07, 08:46 
>Дано:
>У каждого абонента имеется ID из 8 цифр от (0-9)
>На пример: 17070217
>Последние 2 цифры это сумма 6 предидущих. То есть: 1+7+0+7+0+2=17
>Если сумма не двузначное число то добаляется то перед ней добавляется 0.
>
>На пример: 11111106
>
>Надо написать регулярное выражение по которому оператор терминалов будет проверят следующее:
>1. ID содержит ровно 8 цифр от 0 до 9.
>2. Последние 2 цифры это сумма 6 предидущих.

Регулярное выражение, считающие суммы написать нельзя, автоматы впринципе не умеют складвать.
пишите функцию для проверки типа

sub check {
  my ($n)=@_;
  return '' unless ($n=~/^\d+$/);
  my $s=0; foreach ((split //, $n)[0..5]) {$s+=$_}
  return '' unless ($s == substr($n, -2));
  return 1;
}

может подумав можно что-то покомпактней написать, но только на регулярных выражениях такую проверку не сделать.

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

2. "Друзья, помогите с регулярным выражением."  
Сообщение от XAnder (ok) on 22-Мрт-07, 09:01 
>Регулярное выражение, считающие суммы написать нельзя, автоматы впринципе не умеют складвать.

Верно лишь отчасти. В Perl'е есть возможность вставки программного кода внутрь выражения. См. man perlre на предмет конструкций (?{ code }) и (??{ code }). Но в данном случае действительно получится порядочное извращение.

Я бы поступил проще, по-дубовому:

$_ = "17070217";

if (/^(\d)(\d)(\d)(\d)(\d)(\d)(\d\d)$/ && $1+$2+$3+$4+$5+$6 == $7) {
    print "yes";
} else {
    print "no";
}

Думаю, в комментариях не нуждается.

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

3. "Друзья, помогите с регулярным выражением."  
Сообщение от A on 22-Мрт-07, 10:37 
>См. man perlre на предмет конструкций (?{ code })
ну про это написано
WARNING: This extended regular expression feature is
considered highly experimental, and may be changed or
deleted without notice.
такие вещи в продакшен нельзя :-)
Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

Архив | Удалить

Индекс форумов | Темы | Пред. тема | След. тема
Оцените тред (1=ужас, 5=супер)? [ 1 | 2 | 3 | 4 | 5 ] [Рекомендовать для помещения в FAQ]




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2025 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру