![]() |
Източник: http://s3.amazonaws.com/theoatmeal-img/comics/email_monster/1.png |
Съпоставяне с шаблони
POSIX Regex функции
В РНР има две вградени функции, предназначени специално за съпоставяне с шаблони: егеg() (тази функция не се препоръчва от PHP 5.3.0 и нагоре) и eregi() (тази функция не се препоръчва от PHP 5.3.0 и нагоре). Разликата между тях е, че егеg() реагира на регистрите, а eregi()- не. По-широкоизползвана е функцията егеg(), ако не е необходимо толкова точно съвпадение, като например за целите на безопасност с паролите. Стойността на двете функции ще е TRUE, ако има съвпадение със шаблона и FALSE в противен случай.
Ето и два начина за прилагане на тези функции:
ereg("pattern", "string");
или
$Pattern = "pattern";
$String = "string";
eregi($Pattern, $String);
Ето и два начина за прилагане на тези функции:
ereg("pattern", "string");
или
$Pattern = "pattern";
$String = "string";
eregi($Pattern, $String);
Ще създадем нов файл HandleForm_1.php, който ще работи с form_1.html. HandleForm_1.php ще проверява дали правилно е въведен адресът на електронната поща.
Съдържанието на файла form_1.html:
Съдържанието на файла form_1.html:
<!--form_1.html--> <!Doctype html> <html> <head> <title>HTML Форма</title> <meta http-equiv="Content-Type" content="text/html"; charset="UTF-8"> </head> <body> <form action="HandleForm_1.php" method="post" target="_blank"> Име: <br/><input type=text name="firstname" /> <br/><br/> Фамилия: <br/><input type=TEXT NAME="lastname" /> <br/><br/> Имейл адрес: <br/><INPUT TYPE=TEXT NAME="email"/><br/><br/> Коментар: <br> <textarea NAME ="comments" ></textarea><br/><br/> <input type=submit name="submit" formenctype="multipart/form-data" value="Напред >>"/> </form> </body> </html>
Проверка за съответствие с шаблона с функцията eregi()
Синтаксисът та функцията eregi() е следния:
int eregi(string $pattern, string $string[,array &$regs])
Променливата $pattern съдържа регулярния израз.
Променливата $string е входният стринг.
Ако се намерят съвпадения в променливите $pattern и $string, функцията се извиква с третия аргумент $regs. Съвпаденията ще бъдат съхранени в елементите на масива $regs. Върнатата стойност от функцията eregi() е стринг, съдържащ откритите съвпадения. Функцията eregi() ще върне FALSE, ако няма открити съвпадения. Ако незадължителният параметър $regs не е поставен и не са открити съвпадения, функцията eregi() връща 1.
Променливата $string е входният стринг.
Ако се намерят съвпадения в променливите $pattern и $string, функцията се извиква с третия аргумент $regs. Съвпаденията ще бъдат съхранени в елементите на масива $regs. Върнатата стойност от функцията eregi() е стринг, съдържащ откритите съвпадения. Функцията eregi() ще върне FALSE, ако няма открити съвпадения. Ако незадължителният параметър $regs не е поставен и не са открити съвпадения, функцията eregi() връща 1.
PCRE (Perl-Compatible Regular Expressions) функции
В практиката, за откриване на съвпадения в текст, по-често се ползва функцията preg_match().
Синтаксисът й е:
Синтаксисът й е:
int preg_match(string $pattern, string $subject [,array &$matches[, int $flags = 0 [, int $offset = 0 ]]])
Променливата $pattern е шаблона.
Променливата $subject е входния стринг.
Масивът $matches се запълва с резултатите от търсенето.
Допълнителна информация може да откриете на адрес:
http://php.net/manual
Не прилагайте функцията preg_match(), ако само искате да проверите дали един стринг се съдържа в друг стринг.
Променливата $subject е входния стринг.
Масивът $matches се запълва с резултатите от търсенето.
Допълнителна информация може да откриете на адрес:
http://php.net/manual
Не прилагайте функцията preg_match(), ако само искате да проверите дали един стринг се съдържа в друг стринг.
- Отворете текстовия редактор и създайте нов файл. Дайте му наименование HandleForm_1.php.
- Въведете:
<!--HandleForm_1.php--> <!DOCTYPE html> <html> <head> <title>Прирожение на регулярните изрази</title> <meta http-equiv="Content-Type" content="text/html"; charset="UTF-8"> </head> <body> <?php /*Тази страница получава и обработва данните от „form_1.html” */ if (isset($_POST['submit'])) { $firstname = $_POST['firstname']; $lastname = $_POST['lastname']; $email = $_POST['email']; $comments = $_POST['comments']; //Проверява дали са въведени име и фамилия на потребителя if (($firstname) and ($lastname)) { $name = $firstname . " ". $lastname; echo "Здравейте," . " " . $name . "!" . "<br>" . "<br>"; } else { echo "Моля, въведете име и фамилия!<br>"; } //Задава шаблон за адрес на електронната поща с PCRE $pattern = ".+@.+\..+"; //Проверява за съвпадения с функцията eregi() if (eregi($pattern, $email, $matches) ) { echo "Въведената информация е получена!" . "<br>"; echo "Вашият имейл адрес е:" . " " . $email. "<br>"; echo "Вашият коментар е:" . " " . $comments . "<br>". "<br>"; } else { echo "Моля, въведете валиден имейл адрес!" . "<br>" . "<br>". "<br>" ; } //Задава шаблон за адрес на електронната поща с POSIX Regex $pattern = "^[a-zA-Z0-9_.+-]+@?[a-zA-Z0-9-]+\.[a-zA-Z0-9-.]^"; //Проверява за съвпадения с функцията preg_match() if (preg_match($pattern, $email, $matches) ) { echo "Въведената информация е получена!" . "<br>"; echo "Вашият имейл адрес е:" . " " . $email. "<br>"; echo "Вашият коментар е:" . " " . $comments; } else { echo "Моля, въведете валиден имейл адрес!" . "<br>" ; } } ?> </body> </html>
- Съхранете файла. Качете го на сървъра.
- Отворете файла form_1.html.
- Попълнете формата.
- Кликнете върху бутона "Напред >>".
Въведените данни ще се предадат за обработка на файла HandleForm_1.php.
Как работи скриптът?
Частта от кода
Как работи скриптът?
Частта от кода
//Проверява дали са въведени име и фамилия на потребителя if (($firstname) and ($lastname)) { $name = $firstname . " ". $lastname; echo "Здравейте," . " " . $name . "!" . "<br>" . "<br>"; } else { echo "Моля, въведете име и фамилия!<br>"; }
проверява дали са въведени име и фамилия на потребителя и извежда съответните съобщения в прозореца на браузъра. Тук, ако желаете, можете да използвате регулярен израз, за да проверите дали името и фамилията са въведени правилно.
Името и фамилията се обединяват в една променлива $name. Ако името (или фамилията) на потребителя не e въведено, се изписва покана към потребителя да го въведе.
Следващата крачка е създаване на шаблон за проверка на адреса на електронната поща.
Да разгледаме шаблона, който ще използва функцията eregi():
Името и фамилията се обединяват в една променлива $name. Ако името (или фамилията) на потребителя не e въведено, се изписва покана към потребителя да го въведе.
Следващата крачка е създаване на шаблон за проверка на адреса на електронната поща.
Да разгледаме шаблона, който ще използва функцията eregi():
$pattern = ".+@.+\.+.";
Адресът на електронната поща може да се представи във вида
[първа част]@[втора част].[трета част]
или
[първа част] + @ + [втора част] + . + [трета част]
Първата точка означава, че първата част на адреса на електронната поща може да съдържа какъв да е символ. С помощта на символа + добавяме символа @, който задължително се съдържа във всички електронни адреси. Следват произволни символи от втората част, добавяме точката (екранирали сме я), съдържаща се в името на домейна и отново се добавят произволни символи за третата част. Шаблонът е съвсем прост, по-нататък ще напишем по-сложен. За сега това е достатъчно. Прилагаме шаблона за да проверим адреса на електронната поща.
[първа част]@[втора част].[трета част]
или
[първа част] + @ + [втора част] + . + [трета част]
Първата точка означава, че първата част на адреса на електронната поща може да съдържа какъв да е символ. С помощта на символа + добавяме символа @, който задължително се съдържа във всички електронни адреси. Следват произволни символи от втората част, добавяме точката (екранирали сме я), съдържаща се в името на домейна и отново се добавят произволни символи за третата част. Шаблонът е съвсем прост, по-нататък ще напишем по-сложен. За сега това е достатъчно. Прилагаме шаблона за да проверим адреса на електронната поща.
//Проверява за съвпадения с функцията eregi() if (eregi($pattern, $email, $matches) ) { echo "Въведената информация е получена!" . "<br>"; echo "Вашият имейл адрес е:" . " " . $email. "<br>"; echo "Вашият коментар е:" . " " . $comments . "<br>". "<br>"; } else { echo "Моля, въведете валиден имейл адрес!" . "<br>" . "<br>". "<br>" ; }
Ако стойността на променливата $email съответства на шаблона $pattern, условието е истина и на екрана се появяват съответните съобщения, в противен случай потребителят се подканва да въведе валиден имейл адрес.
По идентичен начин се извършва проверката с функцията preg_match(), но синтаксисът на шаблона е малко по-различен.
След изпълнение на form_1.html и HandleForm_1.php, в прозореца на браузъра ще видим:
По идентичен начин се извършва проверката с функцията preg_match(), но синтаксисът на шаблона е малко по-различен.
След изпълнение на form_1.html и HandleForm_1.php, в прозореца на браузъра ще видим:

|
Няма коментари:
Публикуване на коментар