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



 

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

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

2 страниц V   1 2 >
Открыть тему
Тема закрыта
> Регулярные Выражения
tro9an
tro9an
Topic Starter сообщение 11.10.2010, 19:29; Ответить: tro9an
Сообщение #1


Тока начал изучать регулярные выражения, проверте пожалуйста что я тут написал и вообще правильно ли:

Логин:

/^[a-zZ-A0-9]{3,}+$/

можно вводить все буквы и цыфры, и длинна логина должна быть не меньше чем 3 символа(?)


^[a-zZ-A0-9]+@[-a-z0-9]+(.[-a-z0-9])*.[a-z]+$/

это проверка email


Будит ли это работать? и как сделать чтобы можно было вводить тере и знак подчёркивания, а всё остальное нельзя например: ad_min@xxxxx.xx, ad-min@xxxxx.xx
0
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
ZiTosS
ZiTosS
сообщение 11.10.2010, 22:23; Ответить: ZiTosS
Сообщение #2


tro9an,
/^[a-zZ-A0-9]{3,}+$/


[a-zZ-A0-9] - лучше использовать флаги, чем писать a-zA-Z. Флаг регистронезависимости - i. Так же у вас не правильная запись последовательности символов. Z-A не будет работать вроде, обязательно надо A-Z

{3,}+ Масло масленое.
{3,} - 3 и более
+ - один и более

Правильная регулярка:
/^[a-z0-9]{3,}$/i

Кстати, у вас в логине нельзя использовать _ и др. символы

По поводу второй регулярки:
/^[a-zZ-A0-9]+@[-a-z0-9]+(.[-a-z0-9])*.[a-z]+$/

Явно работать не будет. Почитайте про спецсимволы и их экранировку.
Я бы записал так:
/^[-_a-z0-9\.]+@[-a-z0-9]+(\.[-a-z0-9])*\.[a-z]+$/i

Замечание! Как только появится(если ещё не появилась) почта с рускоязычными доменами, данный пример работать не будет.
Реальные регулярки нужно составлять по RFC к email. Да и всё равно валидацию email можно провести только частично, всё равно возможно левое заполнение.


Поблагодарили: (1)
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
tro9an
tro9an
Topic Starter сообщение 12.10.2010, 15:58; Ответить: tro9an
Сообщение #3


ZiTosS, в конце каждой регулярки вы ставили /i, что это значит?
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
gaaarfild
gaaarfild
сообщение 12.10.2010, 16:22; Ответить: gaaarfild
Сообщение #4


Это значит, что поиск регистронезависимый.


Поблагодарили: (1)
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
tro9an
tro9an
Topic Starter сообщение 18.10.2010, 16:20; Ответить: tro9an
Сообщение #5


1. проверка даты типа дд-мм-гггг
/^\d{2,2}([.-/])+\d{2,2}([.-/])+\d{4,4}$/i
не работает, чё я тут неправильно написал?
2.Как сделать точную проверку даты и месяца веди день-39 или например 77, вполне пропустит(тоже самое с месяцом)
З.Ы и если добавите новые символы то поясните их пожалуйста
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
ZiTosS
ZiTosS
сообщение 19.10.2010, 21:52; Ответить: ZiTosS
Сообщение #6


tro9an, сейчас разберемся, вот рабочий пример. Попробуйте сначала сами найти отличия.
[php]<?php

$date = "01-01-2010"; // так же прокатят 01.01.2010 01/01/2010 01012010
preg_match('/^(\d{2})[.\-\/]?(\d{2})[.\-\/]?(\d{4})$/i', $date, $match);
print_r($match);

?>[/php]
1) Скобки нужны для выделения карманов, которые помещаются в $match. Зачем вам в карманы разделители? Поэтому скобками окружил в шаблоне день, месяц и год. С разделителей скобки убрал.
2) Заменил {n,n} на {n} это тоже самое
3) Не забываем экранировать спецсимволы:
3.1) Хоть "/" и не является спецсимволом, но в данном примере мы используем, как символ начала и конца шаблона -> спецсимвол, его нужно экранировать, если он используется в шаблоне, что я и сделал "\/"
3.2) Символ "-" является спецсимволом, когда его используют в маске выбора [...] не первым символом, поэтому его тоже экранировали "\-"
3.3) Символ "." в шаблонах так же является спецсимволом, но как я понял, его не обязательно экранировать в маске выбора, компилятор сам понимает, что в данном случае точка выступает как обычный символ шаблона.
4) У вас в шаблоне использовался "+"(1 или много повторений), я заменил его на "?"(0 или 1 повторений), думаю объяснять не нужно, что раньше бы пролезала бы и дата 01--01---2010, 01./-01-/.2010 и подобные другие.

Проверку теперь можете сделать по $match:
[php]$day = intval($match[1]); // день
$month = intval($match[2]); // месяц
$year = intval($match[3]); // год[/php]

Кстати, у вас не пройдут даты 01.01.10, 1.1.2010, 1.1.10 и подобные :lol:


Поблагодарили: (1)
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
Banderas
Banderas
сообщение 8.1.2011, 1:07; Ответить: Banderas
Сообщение #7


Мне нужно разбить строку
23:44:53 3rd || Слоболян Богдан Владимирович || Banderas123@yandex.ru || Кое что, например о Панкратионе. Это тема!!!

по частям, которые отделены ||

Я использую функцию split()
[php]$farr = file("$D_ROOT/../www/orders/feedback.txt");
echo '<pre>';
print_r($farr[0]);
echo '</pre>';

$end[] = split("\|{2}", $farr[0]); # или "\|\|"

foreach ($end as $key => $value) echo $value.'<br>';[/php]
У меня выскакивает ошибка.
Deprecated: Function split() is deprecated in Z:\home\test1.ru\www\view_fb.php on line 19


Также пробовал функцию preg_match()
preg_match("/^[а-яa-z0-9:]+/i", $farr[0], $end);


В чем ошибка? Я нифига не понял в регулярных выражениях, да? ((
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
Banderas
Banderas
сообщение 8.1.2011, 4:06; Ответить: Banderas
Сообщение #8


Хах!!! УРА!!! я сделал это!!! вуху!!! :)
[php]for ($i=0;$i<count($farr);$i++) {
$end = preg_split("/[||]/", $farr[$i]);
foreach ($end as $key => $value) echo nl2br($value);
}[/php]
как же приятно ;)
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
sc2r2bey
sc2r2bey
сообщение 8.1.2011, 11:38; Ответить: sc2r2bey
Сообщение #9


Banderas, а не проще explode использовать, не всю же жизнь трусы через голову одевать ;) ?


--------------------
Заметки о разработке и не только
программирую web и для we
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
Banderas
Banderas
сообщение 8.1.2011, 12:15; Ответить: Banderas
Сообщение #10


surfer, можно конечно, но очень хотелось попробовать регулярные выражения ;)
Кстати, возник вопрос!
[php]<table border='0' cellpadding='10'>
<tr align=center bgcolor='#e7e7e7'>
<td>Дата</td>
<td>Инициалы</td>
<td>e-mail</td>
<td>Сообщение</td>
</tr>
<?php
for ($i=0;$i<count($farr);$i++) {
$end = preg_split("/[||]/", $farr[$i]);
echo '<tr>';
for ($j=0;$j<count($end);$j++) {
echo '<td>'.$end[$j].'</td>';
$j += 1;
}
echo '</tr>';

}[/php]
При выполнение данного кода, парсер заполняет массив $end вот так
Array ( [0] => 22:03:55 7th [1] => [2] => Вольский Владислав Сергеевич [3] => [4] => cockt@mail.ru [5] => [6] => Кое какой текст для проверки функции mail() )

это конечно не проблема, но хотелось бы удалить пустые ненужные элементы и перезаписать ключи по порядку. Можете подсказать алгоритм?

пс. вот с explode()
[php]foreach ($farr as $key => $value) {
$good = explode('||', $value);
echo '<tr>';
foreach ($good as $k => $v) echo '<td>'.$v.'</td>';
echo '</tr>';
}[/php]
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
2 страниц V   1 2 >
Открыть тему
Тема закрыта
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0


Свернуть

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

  Тема Ответов Автор Просмотров Последний ответ
Горячая тема (нет новых ответов) База профилей+топики для Xrumer 12, регулярные обновления, скидки, бонусы.
98 xrumermaster 48709 15.9.2019, 0:47
автор: -xrumer-master-
Горячая тема (нет новых ответов) База профилей+топики+гостевые+рефспам для Xrumer 12.ххх, регулярные обновления
50 xrumer-master 12703 15.9.2019, 0:00
автор: xrumer-master
Открытая тема (нет новых ответов) Нужны рерайтеры. Простые и регулярные заказы.
Оплата 30-35 рублей / 1000 символов б.п.
3 13sanek 1911 9.5.2017, 12:26
автор: Gadraser


 



RSS Текстовая версия Сейчас: 28.3.2024, 14:54
Дизайн