|
|
|
|
|
для: Quies
(08.01.2011 в 22:23)
| | регуляри регуляркам рознь.
Регулярка с жестким синтаксисом конечного автомата в шаблоне [^}]+}... отработает очень быстро, по сравнению с той же неопределенной [.]+} ...
А если еще и однократные маски применить - так и вообще мгновенно.
Тем более, что объем у Вас, в сущности, скромный.
Поработав некоторое время в регулярками, заметил три вещи, на которые частенько плюют, из-за чего инструмент становится торомозным и ресурсозатратным.
неопределенность в шаблоне (показал выше) , пренебрежение однократными подмасками (из-за чего системе приходится делать откаты назад там, где их можно избежать), пренебрежение расстановкой незахватывающих подмасок там, где не требуются обратные ссылки и получение данных (это приводит к созданию изрядного количества элементов массивов, отъедая лишнюю память и время). | |
|
|
|
|
|
|
|
для: Quies
(08.01.2011 в 22:23)
| | Вы просто делаете таким образом лишнюю надстройку над уже готовым. Лично я не вижу никаких проблем по обработке массива. При этом ссылка (ниже), что длина массива может быть приличной, не может являться проблемой. Я не вижу в данном случае смысла записи массива в строку, чтобы потом получить опять массив. | |
|
|
|
|
|
|
|
для: sim5
(08.01.2011 в 04:47)
| | Я не против массивов, как таковых. И знаю что в php есть богатый функционал по работе с ними.
Но для обработки форм его всё равно не достаточно (код получиться длинным и сложным для больших форм), так как в форму могут запихнуть недоброжелатели, какой угодно код. | |
|
|
|
|
|
|
|
для: sim5
(08.01.2011 в 04:47)
| | А как быть с определением длинны строки?Да ещё со всеми остальными тесторами вроде проверки валидности email или телефона.
Явно быстрее записать:
emailtest: email, email2;
phonetest: phone;
|
Чем писать всё это на чистом php.
Скобки нужны чтоб отделить блоки разных массивов друг от друга(и не только массивов блоки могут быть разного назначения), и не возиться с настройками класса.
Тем более регулярок здесь по минимуму. Всё остальное можно разобрать стандартными функциями php. | |
|
|
|
|
|
|
|
для: Quies
(08.01.2011 в 03:28)
| | Достаточно одного действия (функции пересечения массивов, без всякого цикла), чтобы узнать, что есть пустые поля и какие, и это заметьте без всяких скобок. От того, что к имени Вася добавить фигурные скобки, произносить это имя легче не станет, а вот лишнего добавится. Да и вы прописали не решение, из которого бы видно было, что вам помогли скобки, вы прописали желание свое.
Я могу сказать только одно - форма, это массив/массивы, а массив, это удобно, тем более, что существует богатый инструментарий работы с ним. Если вы "изуродовали" массив таким образом, что приходиться обращаться к таким затратным методам, как рег. выражения, то это уже плохо. | |
|
|
|
|
|
|
|
для: sim5
(08.01.2011 в 02:41)
| | Ответил, сообщением выше. | |
|
|
|
|
|
|
|
для: sim5
(07.01.2011 в 10:18)
| | Хорошо. Объясню на примере.
Допустим нам нужно принять некоторые данные из формы и протестировать их.
Пусть это будет title, text, phone, email, contacts, icq, skype, city, country, name, firsname, gender
Тестировать будем на пустоту полей, и длину поля (вообще обычно требуется больше различных тостеров, но пока ограничимся этим).
Причём на пустоту полей нужно протестировать только title, text, phone, email, city, country, name, firsname, gender
а, на длину поля только title, text, phone, email, contacts
Как это будет на стандартном php:
<?php
if(empty($_POST["title"]) || empty($_POST["text"]) || empty($_POST[" phone"]) ||
empty($_POST["email"]) || empty($_POST["city"]) || empty($_POST["country"]) ||
empty($_POST["name"]) || empty($_POST[" firsname"]) || empty($_POST["gender"]) ||
strlen($_POST["title"])>30 || strlen($_POST["text"])>40 || strlen($_POST["phone"])>50 ||
strlen($_POST["email"])>20 || strlen($_POST["contacts"])>50){
// ВЫВОДИМ ФОРМУ ПОВТОРНО
// ВЫВОДИМ ОШИБКИ
if(empty($_POST["title"])) echo "Поле 'Заголовок' пустое!";
if(empty($_POST["text"])) echo "Поле 'Описание' пустое!";
if(empty($_POST["phone"])) echo "Поле Телефон' пустое!";
if(empty($_POST["email"])) echo "Поле 'e-mail' пустое!";
if(empty($_POST["city"])) echo "Поле 'Город' пустое!";
if(empty($_POST["country"])) echo "Поле 'Страна' пустое!";
if(empty($_POST["name"])) echo "Поле 'Имя' пустое!";
if(empty($_POST[" firsname"])) echo "Поле 'Фамилия' пустое!";
if(empty($_POST["gender"])) echo "Поле 'Пол' пустое!";
if(strlen($_POST["title"])>30) echo "Поле 'Заголовок' не должно привышать 30 символов!";
if(strlen($_POST["text"])>40) echo "Поле 'Описание' не должно привышать 40 символов!";
if(strlen($_POST["phone"])>50)echo "Поле Телефон' не должно привышать 50 символов!";
if(strlen($_POST["email"])>20) echo "Поле 'e-mail' не должно привышать 20 символов!";
if(strlen($_POST["contacts"])>50) echo "Поле 'Контакты' не должно привышать 50 символов!";
} else {
// РЕЗУЛЬТАТ УДАЧНЫЙ, ЗАНОСИМ В БД ИЛИ ЧТО ТО ДРУГОЕ
}
?>
|
Можно попытаться оптимизировать при помощи циклов, но более менее короткий код получиться если нужно проверить все поля на пустоту и на длинну поля.
Но, если поля не все тестировать, да ещё у тестеров разные параметры(как в примере с длинной строки).
Придёться возиться с отсевом ненужных полей, да ещё и для каждой новой формы изобритать свой цикл отсева.
Переизбыток кода очевиден.
Как я хочу сделать (синтексис пока не окончательный, но примерно в этом духе будет)
<?php
$code="
@POST{
empty: title, text, phone, email, city, country, name, firsname, gender;
maxlen: title[30], text[40], phone[50], email[20], contacts[50];
}
";
$script = new ClassName;
$script->text=$code;
if($script-> start()){
// ВЫВОДИМ ФОРМУ ПОВТОРНО
// ВЫВОДИМ ОШИБКИ
$script-> errors();
} else{
// РЕЗУЛЬТАТ УДАЧНЫЙ, ЗАНОСИМ В БД ИЛИ ЧТО ТО ДРУГОЕ
}
?>
|
Сравните объём кода.
Просто уже надоело возиться с тестированием данных больших форм, и писать повторяющейся непродуктивный код. | |
|
|
|
|
|
|
|
для: Quies
(08.01.2011 в 02:36)
| | А самих ключей, что не хватает для ориентации? | |
|
|
|
|
|
|
|
для: Trianon
(07.01.2011 в 08:55)
| | Да, именно так. В скобках не сами данные, а ключи управляющие ими. | |
|
|
|
|
|
|
|
для: Trianon
(07.01.2011 в 08:19)
| | Спасибо. Как раз то что нужно.
Этот код заработал:
<?php
$text = "
@GET{
ЛОРолрлоЛОРЛЛБ
GFGHFGHFG4359840
KLEJTR09
E50943T
}
@FILE{
GFGHFGHFG4359840
KLEJTR09
E50943T
}
@GET{
dfg54t4 fddgfd
}
@POST {ЖЖДЛЖ}
@GET{
ty65465656 fddgdfgd
GFGHFGHFG4359840
KLEJTR09
E50943T
}
";
preg_match_all ("|@GET\{([^}]+)|i", $text, $regs);
print_r($regs[1]);
?>
|
Выводит:
Array
(
[0] =>
ЛОРолрлоЛОРЛЛБ
GFGHFGHFG4359840
KLEJTR09
E50943T
[1] =>
dfg54t4 fddgfd
[2] =>
ty65465656 fddgdfgd
GFGHFGHFG4359840
KLEJTR09
E50943T
)
|
| |
|
|
| |
|