Форум программистов, компьютерный форум, киберфорум
PHP: RegExp
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.54/13: Рейтинг темы: голосов - 13, средняя оценка - 4.54
4 / 4 / 0
Регистрация: 29.03.2011
Сообщений: 38

Регулярные выражения через preg.match

27.12.2012, 00:17. Показов 2836. Ответов 16
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Ребят! нужна помощб в функции... немогу никак понять.. уже часов 7 сижу и что только не делал.. весь гугл облазил.
В общем проблема такая - необходимо проверить поле $tel на +380(XX) XXX-XX-XX где X числа 0-9
Есть некая форма для заполнения. в ней есть имя, фамилия, адрес, почтовый индекс, ТЕЛЕФОН

через Jquery не предлагайте т.к. задание именно на PHP
Помогите пожалуйтса=)

PHP
1
 if(!preg_match("/^[0-9]{1,30}$/is",$tel)) die("fffff"); Else $tel=$_POST('tel');
Все время возвращает false

Добавлено через 12 минут

Весь код:
Кликните здесь для просмотра всего текста
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
 <h2 align="center">Оформление заказа</h2>
 
<?
if($_SESSION['cart'] && !isset($_POST['order']))
{
?>
<form action="index.php?view=order" method="post" id="cart-form">
 
<table id="mycart" align="center" cellspacing="0" cellpadding="0" border="0">
      <tr>
            <th>Товар</th>
            <th>Цена</th>
            <th>Кол-во</th>
            <th>Всего</th>
      </tr>
 
      <? foreach($_SESSION['cart'] as $id => $quantity):
         $product = get_product($id);
      ?>
        
      <tr>
          <td align="center"><?=$product['title'];?></td>
          <td align="center">$<?=number_format($product['price'],2);?></td>
          <td align="center"><?=$quantity;?></td>
          <td align="center">$<?=number_format($product['price'] * $quantity ,2);?></td>
      </tr>
      
      <?endforeach;?>
      
</table>    
     <p class="total" align="center">Общая сумма заказа: <span class="product-price"><?=number_format($_SESSION['total_price'],2);?> $</span></p>
     
     <p align="left" style="color:  #FFF; padding: 10px 40px 10px 60px;" >
     <b>Ваше Имя:</b> <br />
     <input type="text" name="name" />  <br />
     <b>Ваша Фамилия:</b> <br />
     <input type="text" name="s_name" /><br />
     <b>Ваш адрес:</b> <br />
     <input type="text" name="address" /><br />
     <b>Почтовый индекс:</b> <br />
     <input type="text" name="post_index" /><br />
     <b>Ваш e-mail:</b> <br />
     <input type="text" name="email" /><br />
     <b>Ваш Телефон:</b> <br />
     <input type="text" name="tel" /><br />
     <p align="center" style="color: cyan;">Все поля обязательны для заполнения!</p>
     </p>
      
     
     <p align="center"><input type="submit" name="order" value="Заказать" /></p>
        
        
        <?
}
        if($_SESSION['cart'] && isset($_POST['order']))
        {
            foreach($_POST as $ArrKey => $ArrStr) 
            {
                $ArrKey = $_POST[$ArrKey];
            }
            $name=$_POST['name'];
            $s_name=$_POST['s_name'];
            $address=$_POST['address'];
            $post_index=$_POST['post_index'];
            $email=$_POST['email'];
            
            
            //$pattern = "#^333$#"; 
            // if(!preg_match($pattern, $tel)) echo("Телефон задан в неверном формате!"); 
            // else $tel=$_POST['tel'];
            
            if(!preg_match("/^[0-9]{1,30}$/is",$tel)) die("fffff"); Else $tel=$_POST('tel');
            
            $date = date('Y-m-d');
            $time = date('H:i:s');
            
                
            foreach($_SESSION['cart'] as $id => $quantity):
            $product = get_product($id);
                $query = mysql_query("INSERT INTO orders(name,s_name,address,post_index,email,tel,date,time,product,prod_id,price,qty) VALUES ('$name','$s_name','$address','$post_index','$email','$tel','$date','$time','{$product['title']}','{$product['id']}','{$product['price']}','$quantity')");
            endforeach;
            
            echo "<p align='center' style='color: #fff;'>Ваш заказ успешно принят! Спасибо за покупку!</p>";
            unset($_SESSION['cart']);
        }
        ?>  
</form>
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
27.12.2012, 00:17
Ответы с готовыми решениями:

функция preg match
Если знаешь что должно получиться на выходе из поля формы, ограничивать каждое поле регуляркой, что бы получаемая информация...

И снова preg match all, не могу справиться с парсингом
Приветствую всех! Прошу помощи в разрешении следующей проблемки: Пытаюсь спарсить ссылки и название в следующем коде &lt;td...

Нужна помощь, я в preg match шарю плохо.
нужен код который например вытащит 51dg3s51ger86g1e35r из кода : &lt;br&gt;blablabla&quot;auth_key&quot;:&quot;51dg3s51ger86g1e35r&quot; blabllalbalbla ...

16
-1 / 0 / 0
Регистрация: 27.12.2012
Сообщений: 17
27.12.2012, 00:43
PHP
1
preg_match("/\+380\(\d+\d+\)\s+\d+\d+\d+\-\d+\d+\-\d+\d+$/",переменная);
Попробуй так.
0
4 / 4 / 0
Регистрация: 29.03.2011
Сообщений: 38
27.12.2012, 00:53  [ТС]
Цитата Сообщение от StressoID Посмотреть сообщение
PHP
1
preg_match("/\+380\(\d+\d+\)\s+\d+\d+\d+\-\d+\d+\-\d+\d+$/",переменная);
Попробуй так.
Неа( Не хочет...
PHP
1
2
3
4
            if(!preg_match("/\+380\(\d+\d+\)\s+\d+\d+\d+\-\d+\d+\-\d+\d+$/",$tel))
                          die("Ошибка ввода телефона");
                          Else
                               $tel=$_POST('tel');
0
-1 / 0 / 0
Регистрация: 27.12.2012
Сообщений: 17
27.12.2012, 01:06
Прошу прощения. Начало строки вылетело.

PHP
1
preg_match("/^\+380\(\d+\d+\)\s+\d+\d+\d+\-\d+\d+\-\d+\d+$/",переменная);
0
4 / 4 / 0
Регистрация: 29.03.2011
Сообщений: 38
27.12.2012, 01:22  [ТС]
Цитата Сообщение от StressoID Посмотреть сообщение
Прошу прощения. Начало строки вылетело.

PHP
1
preg_match("/^\+380\(\d+\d+\)\s+\d+\d+\d+\-\d+\d+\-\d+\d+$/",переменная);
Все равно ошибка.. мб что-то не так я пишу в иф?
PHP
1
2
3
4
              if(!preg_match("/^\+380\(\d+\d+\)\s+\d+\d+\d+\-\d+\d+\-\d+\d+$/",$tel))
                  die("Ошибка ввода телефона");
              Else
                  $tel=$_POST('tel');
у меня он все время false
0
-1 / 0 / 0
Регистрация: 27.12.2012
Сообщений: 17
27.12.2012, 01:29
Да. Потому что у вас переменная $tel пустая и вы делаете проверку по пустой переменной.
preg_match в этом случае вернет false, а так как стоит ! то false изменится на true и выполнится 1 блок.

if бессмысленный. Попробуйте так:
PHP
1
2
3
4
5
6
7
$tel = $_POST['tel'];
if (preg_match("/^\+380\(\d+\d+\)\s+\d+\d+\d+\-\d+\d+\-\d+\d+$/",$tel)){
//проверка пройдена
}
else {
// проверка не пройдена
}
0
4 / 4 / 0
Регистрация: 29.03.2011
Сообщений: 38
27.12.2012, 01:38  [ТС]
Цитата Сообщение от StressoID Посмотреть сообщение
$tel = $_POST['tel'];
Эта строчка вносит телефон в БД .
После нее нет смысла делать проверку на правильность телефона.

$tel - он берет из формы, которая заполняется, тогда как ('tel') - поле БД, в которое вносится
0
-1 / 0 / 0
Регистрация: 27.12.2012
Сообщений: 17
27.12.2012, 01:56
Цитата Сообщение от econ_ciber Посмотреть сообщение
Эта строчка вносит телефон в БД .
После нее нет смысла делать проверку на правильность телефона.

$tel - он берет из формы, которая заполняется, тогда как ('tel') - поле БД, в которое вносится
Эта строчка кладет в переменную $tel содержимое элемента формы с именем tel. А в БД данные вносит, как правило, INSERT INTO. Которого я в вашем скрипте не вижу.
0
4 / 4 / 0
Регистрация: 29.03.2011
Сообщений: 38
27.12.2012, 02:05  [ТС]
Цитата Сообщение от StressoID Посмотреть сообщение
Эта строчка кладет в переменную $tel содержимое элемента формы с именем tel. А в БД данные вносит, как правило, INSERT INTO. Которого я в вашем скрипте не вижу.
PHP
1
2
3
4
5
6
7
8
9
10
   $name=$_POST['name'];
            $s_name=$_POST['s_name'];
            $address=$_POST['address'];
            $post_index=$_POST['post_index'];
            $email=$_POST['email'];
 
foreach($_SESSION['cart'] as $id => $quantity):
            $product = get_product($id);
                $query = mysql_query("INSERT INTO orders(name,s_name,address,post_index,email,tel,date,time,product,prod_id,price,qty) VALUES ('$name','$s_name','$address','$post_index','$email','$tel','$date','$time','{$product['title']}','{$product['id']}','{$product['price']}','$quantity')");
            endforeach;
0
-1 / 0 / 0
Регистрация: 27.12.2012
Сообщений: 17
27.12.2012, 02:28
Еще раз. Переменная $tel у вас пустая. И ваш первоначальный if служит для того, чтобы проверить правильность ввода телефона из формы, но так как $tel пустая, то preg_match возвращает false, знак "!"(не) меняет значение false на true и срабатывает первый блок где у вас die.

Вам нужно написать такой код:
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
$name=$_POST['name'];
            $s_name=$_POST['s_name'];
            $address=$_POST['address'];
            $post_index=$_POST['post_index'];
            $email=$_POST['email'];
            $tel = $_POST['tel'];
if (preg_match("/^\+380\(\d+\d+\)\s+\d+\d+\d+\-\d+\d+\-\d+\d+$/",$tel)){
 
foreach($_SESSION['cart'] as $id => $quantity):
            $product = get_product($id);
                $query = mysql_query("INSERT INTO orders(name,s_name,address,post_index,email,tel,date,time,product,prod_id,price,qty) VALUES ('$name','$s_name','$address','$post_index','$email','$tel','$date','$time','{$product['title']}','{$product['id']}','{$product['price']}','$quantity')");
            endforeach;
}
else {
die "Ошибка ввода телефона";
}
0
4 / 4 / 0
Регистрация: 29.03.2011
Сообщений: 38
27.12.2012, 02:44  [ТС]
Цитата Сообщение от StressoID Посмотреть сообщение
Еще раз. Переменная $tel у вас пустая. И ваш первоначальный if служит для того, чтобы проверить правильность ввода телефона из формы, но так как $tel пустая, то preg_match возвращает false, знак "!"(не) меняет значение false на true и срабатывает первый блок где у вас die.

Вам нужно написать такой код:
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
$name=$_POST['name'];
            $s_name=$_POST['s_name'];
            $address=$_POST['address'];
            $post_index=$_POST['post_index'];
            $email=$_POST['email'];
            $tel = $_POST['tel'];
if (preg_match("/^\+380\(\d+\d+\)\s+\d+\d+\d+\-\d+\d+\-\d+\d+$/",$tel)){
 
foreach($_SESSION['cart'] as $id => $quantity):
            $product = get_product($id);
                $query = mysql_query("INSERT INTO orders(name,s_name,address,post_index,email,tel,date,time,product,prod_id,price,qty) VALUES ('$name','$s_name','$address','$post_index','$email','$tel','$date','$time','{$product['title']}','{$product['id']}','{$product['price']}','$quantity')");
            endforeach;
}
else {
die "Ошибка ввода телефона";
}
СПАСИБО ВАМ ОГРОМНОЕ! Блин.. 8 часов потртил втупую! Я ток начинающий php-шник и много-го не знаю!)
Наконецто заработало))
0
-1 / 0 / 0
Регистрация: 27.12.2012
Сообщений: 17
27.12.2012, 02:47
Цитата Сообщение от econ_ciber Посмотреть сообщение
СПАСИБО ВАМ ОГРОМНОЕ! Блин.. 8 часов потртил втупую! Я ток начинающий php-шник и много-го не знаю!)
Наконецто заработало))
Пожалуйста. Можете и к репутации плюсануть. Я не обижусь =)
0
4 / 4 / 0
Регистрация: 29.03.2011
Сообщений: 38
27.12.2012, 02:50  [ТС]
Цитата Сообщение от StressoID Посмотреть сообщение
Пожалуйста. Можете и к репутации плюсануть. Я не обижусь =)
Я бы с удовольствием, только уже 10 минут ищу где поставить плюсик Вам к репутации))
0
-1 / 0 / 0
Регистрация: 27.12.2012
Сообщений: 17
27.12.2012, 02:56
Цитата Сообщение от econ_ciber Посмотреть сообщение
Я бы с удовольствием, только уже 10 минут ищу где поставить плюсик Вам к репутации))
Кнопка на сообщениях "+1 Спасибо".
0
4 / 4 / 0
Регистрация: 29.03.2011
Сообщений: 38
27.12.2012, 03:02  [ТС]
Цитата Сообщение от StressoID Посмотреть сообщение
Кнопка на сообщениях "+1 Спасибо".
ее нету((
Миниатюры
Регулярные выражения через preg.match  
0
-1 / 0 / 0
Регистрация: 27.12.2012
Сообщений: 17
27.12.2012, 03:06
Тогда проехали. =)
0
4 / 4 / 0
Регистрация: 29.03.2011
Сообщений: 38
27.12.2012, 03:09  [ТС]
Цитата Сообщение от StressoID Посмотреть сообщение
Тогда проехали. =)
Спасибо еще раз)))
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
27.12.2012, 03:09
Помогаю со студенческими работами здесь

Warning: preg_match() [function.preg-match]: Delimiter must not be alphanumeric or backslash
Добрый день. Только начал изучать регулярные выражения и решил прочитать книгу для новичков. но не смог справится с самым первым примером....

ЧПУ. Замена строк, регулярные выражения. Как правильно использовать переменную в регулярные выражения ?
Здравствуйте! Решил реализовать ЧПУ на своем сайте. Первый этап это замена всех реальных ссылок на чпу ссылки. Так вот при замене я...

Формулировка поиска через регулярные выражения php
Здравствуйте! Нужна помощь в написании нескольких регулярных выражений для таких строк: &lt;span itemprop=&quot;price&quot;...

Регулярные выражения
Почему не работает? Где собака зарыта, помогите отрыть :) &lt;?php header (&quot;Content-Type:text/html; charset=UTF-8&quot;); ini_set...

Регулярные выражения
Добрый день. Помогите заменить строку к примеру: /eelnou-otsing/eelnou-otsing/eelnou-otsing/?prepage=15 на ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
17
Ответ Создать тему
Новые блоги и статьи
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
Фото: Daniel Greenwood
kumehtar 13.11.2025
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru