X   Сообщение сайта
(Сообщение закроется через 3 секунды)



 

Здравствуйте, гость (

| Вход | Регистрация )

2 страниц V   1 2 >
Открыть тему
Добавить ответ в эту тему
> регулярное выражение
Panich
Panich
Topic Starter сообщение 26.5.2011, 17:13; Ответить: Panich
Сообщение #1


Пытаюсь составить регулярное выражение в php,что бы в диапазон попадали числа, нужные только мне!
[PHP]preg_match("(|10-15|25-50)",$i)[/PHP]
и
[PHP]preg_match("(3|17|80)",$i)[/PHP]
В первом случае попадает число для проверки в диапазоне от 10 до 15 или от 25 до 50
Во втором только числа 3 или 17 или 80
Не получается...
0
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
P0ZiTR0N
P0ZiTR0N
сообщение 26.5.2011, 17:34; Ответить: P0ZiTR0N
Сообщение #2


$i =?
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
Panich
Panich
Topic Starter сообщение 26.5.2011, 17:41; Ответить: Panich
Сообщение #3


[PHP]<?php
include ("bd.php");
$result4 = mysql_query("SELECT * FROM users WHERE login='$login' LIMIT 1", $db)or die("Ошибка в запросе: " . mysql_error());
$myrow4 = mysql_fetch_array($result4);
if (empty($myrow4['avatar']))
{
$avatar = "../files/avatars/net-avatara.jpg";
}
else
{
$avatar=$myrow4['avatar'];
}
$id = $myrow4['id'];
$name = $myrow4['name'];
$pol = $myrow4['pol'];
$vozr_namber = $myrow4['vozr_namber'];
$vozr_mouns = $myrow4['vozr_mouns'];
$vozr_year = $myrow4['vozr_year'];
$sity = $myrow4['sity'];
$pass = $myrow4['pass'];
$login = $myrow4['login'];
$day = date("d");
$mauns = date("m");
$year = date("Y");
$age_day = $day - $vozr_namber;
$age_mauns = $mauns - $vozr_mouns;
$vozrast = $year - $vozr_year;
if ($age_mauns < 0 and $age_day < 0)
{
$vozrast = $vozrast - 1;
}
else{}
if (preg_match("[5-20|25-30|35-40|45-50|55-60]", $vozrast))
{
$let = "лет";
}
else{
if(preg_match("(1|21|31|41|51)", $vozrast))
{
$let = "год";
}
else{
if(preg_match("(2-4|22-24|32-34|42-44|52-54)", $vozrast))
{
$let = "года";
}
else{}
}
}
echo $let;
$HTML='<table id="for_tabel_reg">
<tr>
<td class="sity">'.$sity.'</td>
</tr>
<tr>
<td>
<strong class="name">'.$name.'</strong><em class="age_user">&nbsp;&nbsp;'.$vozrast.'&nbsp;&nbsp;'.$let.'</em>
</td>
</tr>
<tr>
<td>
<a><img class="img" alt="" src="'.$avatar.'"></a>
</td>
</tr>
</table>';
print $HTML;
?>[/PHP]
Хочу что бы когда в переменной $vozrast было число,равное реальному возрасту пользователя регулярное выражение проверяло его и в зависимости от значения дописывало в таблице слова "лет, года, года", что бы небыло на сайте глупости на подобие "32 лет"
И ещё вопрос:
возможно ли вместо вытаскивания даты из установленной на компьютере пользователя с помощью выражения
[PHP] $day = date("d");
$mauns = date("m");
$year = date("Y");[/PHP]
вытаскивать дату на сервере?Точнее знаю,что возможно,но с помощью какого выражения?
Так же точнее будет?Качественнее?
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
P0ZiTR0N
P0ZiTR0N
сообщение 26.5.2011, 17:56; Ответить: P0ZiTR0N
Сообщение #4


Понял.. В общем на скорую руку (поидее должно работать):
[PHP]
$i = 16;
$n = preg_match("/^[{10,15}|{25,50}]+$/",$i);
echo $i. "\n\r". $n; //выведет 16 0...
[/PHP]
Кстати, диапазон задаётся {a,z}, а не (a-z)
Аналогично и для второй проверки:
[PHP]$i = 17;
$n = preg_match("/^[3|17|80]+$/",$i);
echo $i. "\n\r". $n; \\выведет 17 1
[/PHP]
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
P0ZiTR0N
P0ZiTR0N
сообщение 26.5.2011, 18:04; Ответить: P0ZiTR0N
Сообщение #5


(Panich @ 26.5.2011, 20:41) *
[PHP]$day = date("d"); $mauns = date("m"); $year = date("Y");[/PHP]


Это и есть работа с сервером
Определить дату и время у юзера можно кромсая http заголовки, либо добавляя хидден поля к формам... ну или извращаться с куками :)
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
Panich
Panich
Topic Starter сообщение 26.5.2011, 18:15; Ответить: Panich
Сообщение #6


Попробовал заменить:
[PHP]<?php
if (preg_match("/^[{5,20}|{25,30}|{35,40}|{45,50}|{55,60}]+$/", $vozrast))
{
$let = "лет";
}
else{
if(preg_match("/^[1|21|31|41|51]+$/", $vozrast))
{
$let = "год";
}
else{
if(preg_match("/^[{2,4}|{22,24}|{32,34}|{42,44}|{52,54}]+$/", $vozrast))
{
$let = "года";
}
else{}
}
}
$HTML='<table id="for_tabel_reg">
<tr>
<td class="sity">'.$sity.'</td>
</tr>
<tr>
<td>
<strong class="name">'.$name.'</strong><em class="age_user">&nbsp;&nbsp;'.$vozrast.'&nbsp;&nbsp;'.$let.'</em>
</td>
</tr>
<tr>
<td>
<a><img class="img" alt="" src="'.$avatar.'"></a>
</td>
</tr>
</table>';
print $HTML;
?>[/PHP]
Переменная $vozrast равна 32-ум.
На экране браузера выводит "32 лет" вместо 32 года!
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
Apay
Apay
сообщение 26.5.2011, 18:23; Ответить: Apay
Сообщение #7


(P0ZiTR0N @ 26.5.2011, 20:56) *
Кстати, диапазон задаётся {a,z}, а не (a-z)
или я что-то путаю, иливообще-то в регулярках так:
[a-z] - диапазон символов, то есть любой символ из от a до z
{2,5} - это преддыдущая маска/символ повторяется от 2 до 5 раз

P0ZiTR0N
, в первом вырианте $i='|'; выдаст true
во 2 варианте $i=18; тоже выдаст true
то есть ничего не работает правильно

а по теме, оптимальней всего сравнивать int
[PHP]$i = (int) $i;
if( $i >= 10 && $i <= 15 || $i >= 25 && $i <= 50 )[/PHP]
и
[PHP]$i = (int) $i;
if( $i == 3 || $i == 17 || $i == 80 )[/PHP]
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
P0ZiTR0N
P0ZiTR0N
сообщение 26.5.2011, 18:27; Ответить: P0ZiTR0N
Сообщение #8


(Apay @ 26.5.2011, 21:23) *
{2,5} = это преддыдущая маска/символ повторяется от 2 до 5 раз


И опять таки я не прав... :rolleyes:
Кстати, согласен int сравнение лучше
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
Panich
Panich
Topic Starter сообщение 26.5.2011, 18:28; Ответить: Panich
Сообщение #9


Думал не расписывать долгие выражения,а лишь однним регулярным справиться,но придётся теперь кодить как Вы сказали!Главное,что бы потом на форумах не тыкали носом,что глупо написал...)))
Спасибо!
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
Apay
Apay
сообщение 26.5.2011, 18:38; Ответить: Apay
Сообщение #10


Panich, проще надо быть
[PHP]
$i1 = $i % 10;
if( $i1 > 4 || $i1 == 0 || $i > 10 && $i < 15 ) $s = 'лет';
elseif( $i1 == 1 ) $s = 'год';
else $s = 'года';[/PHP]
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
2 страниц V   1 2 >
Открыть тему
Добавить ответ в эту тему
Быстрый ответ
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0


Свернуть

> Похожие темы

  Тема Ответов Автор Просмотров Последний ответ
Открытая тема (нет новых ответов) Регулярное наполнение новостного сайта провинциального города
15 4enki 3629 10.3.2016, 22:39
автор: 4enki
Горячая тема (нет новых ответов) Тема имеет прикрепленные файлыРезультативные прогоны Хрумером по свежесобранным базам для поднятия позиций в Yandex и Google (Выдача, тИЦ, PR)… Регулярное обновление баз.
275 Kroner 146888 23.4.2015, 11:57
автор: Kroner


 



RSS Текстовая версия Сейчас: 29.3.2024, 13:43
Дизайн