Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Общие вопросы > preg_match()


Автор: Максим 16.3.2005, 13:24
Казалось бы элементарная задача, оставить в переменной только символы из определенного набора (А-Я, а-я, A-Z, a-z, и несколько других). Но как лучше, правильней и удобней это сделать?

Код

if (!preg_match("/[0-9a-z_]+@[0-9a-z_^\.]+\.[a-z]{2,3}/i", $email))
{
}

if (preg_match("/[^(\w)|(\x7F-\xFF)|(\s)]/",$name))
{
}

Это похоже на то что я искал, но тут http://myphp.net.ru/functions/index.php?preg-match не очень понятно написано.
Помогите разобраться в этих двух строчках

Автор: Mal Hack 16.3.2005, 14:00
Цитата
if (!preg_match("/[0-9a-z_]+@[0-9a-z_^\.]+\.[a-z]{2,3}/i", $email))
{
}

Проверка мыла:
Код
<?php

$email = "[email protected]";

$name    = "(\w|\d){1}(\w|\d|\-|_|\.|\+)+?(\w|\d){1}";
$domain1 = "((\w|\d){1,}(\-|\.){0,1}(\w|\d){1,})+?" ;
$domain2 = "\.(\w){2,4}";

if( preg_match( "#^" . $name . "@" . $domain1 . "" . $domain2 . "$#i" , $email ) )
  {  print "Valid e-mail.";  }
else
  {  print "Incorrect e-mail.";  }

?>


Цитата
if (preg_match("/[^(\w)|(\x7F-\xFF)|(\s)]/",$name))
{
}

По точнее задачу поясни smile

Автор: Максим 16.3.2005, 14:23
Mal Hack
Не совсем понятен синтексис этой команды.
Какие значения (для чего служат) квадратные скобки
| - похоже на разделитель, но что он разделяет
какие значение имеют ключи \w \s \x и другие (какие вообще есть)
И уж совсем не понятно что означает и для чего нужен знак ^

Автор: Mal Hack 16.3.2005, 18:20
Вот тут есть ответы на твои вопросы.
http://ru3.php.net/manual/ru/reference.pcre.pattern.modifiers.php
http://ru3.php.net/manual/ru/reference.pcre.pattern.syntax.php

Автор: Irokez 16.3.2005, 19:59
сорри за оффтоп, но чем отличаются границы шаблона: "/.../", "#...#", "!...!"
нигде не могу найти инфу насчет этого, мне говорили что они как то влияют на возвращаемое значение переменых ($1, $2 ...)

Автор: Mal Hack 16.3.2005, 20:40
Вроде никак.

Цитата(Irokez @ 16.3.2005, 19:59)
$1, $2 ...

Лично мне интересно больше чем отличаются \\1 и $1. Различия между № ! / по логике никакой.

Автор: Irokez 16.3.2005, 20:57
да вроде тоже никак, я обычно использую с долларом, так приятнее =)
т.е. границами шаблонов могут быть любые символы? (@ # $ % ^ & *)

Автор: Mal Hack 16.3.2005, 21:04
Цитата(Irokez @ 16.3.2005, 20:57)
да вроде тоже никак, я обычно использую с долларом, так приятнее =)

А тогда смысл делать эти две возможности?

Цитата(Irokez @ 16.3.2005, 20:57)
т.е. границами шаблонов могут быть любые символы? (@ # $ % ^ & *)

Я знаю только про / # !. Все. Про другие символы не знаю.

Автор: Irokez 16.3.2005, 21:09
Цитата(Mal @ 16.3.2005, 21:04)
А тогда смысл делать эти две возможности?

по моему $1 - это перловская версия, \\1 - пхпшная ... хотя могу ошибаться

Автор: IZ@TOP 17.3.2005, 14:22
Цитата(Mal @ 16.3.2005, 22:04)
знаю только про / # !. Все. Про другие символы не знаю.

По моему при использовании знака процента, отпадает надобность в можификаторе s - т.е. например шаблон /([a-z]{1,5}/s равносилен %([a-z]{1,5})%.

Автор: Mal Hack 17.3.2005, 15:55
Вряд ли... Блин, и как назло ничего в доке PHPшной нет.. smile

Автор: Irokez 17.3.2005, 21:05
Цитата(IZ @ 17.3.2005, 14:22)
По моему при использовании знака процента, отпадает надобность в можификаторе s - т.е. например шаблон /([a-z]{1,5}/s равносилен %([a-z]{1,5})%.

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

Автор: Максим 21.3.2005, 20:38
Ну мне то теперь понятно гораздо больше об этой функции чем было совсем недавно.
Если же у кого то возникнет такая же проблема (все-таки команда preg_match не такая уж и простая), смело идите сюда:
http://eyewink.fatal.ru/wcoding/php.php?page=4
Все описано очень понятным и доступным языком.
Что касается некоторых других (на вполне хороших и даже замечательных сайтах) страниц и объяснений по этой функции - сколько не кувыркался, ничерта не понятно.

Автор: Ринат 31.3.2005, 11:36
вот хорошее регулярное выражение для проверки мыла, притом проходят мыла типа [email protected] , POSIX правда

Код

function checkmail($mail)
    {
if (strlen($mail)==0) return false;
        if (ereg("^[_a-zA-Z0-9-]+(\.[_a-zA-Z0-9-]+)*@([a-zA-Z0-9-]+\.)+([a-zA-Z]{2,4})$", $mail))
return true;
    }


Автор: Irokez 31.3.2005, 19:47
зато не пройдет что-нибудь вроде [email protected] smile надо лимит на количество символов в домене первого уровня увеличить до 6ти

Автор: Mal Hack 31.3.2005, 19:59
Ребят тут на счет мыла была тема smile Как итог темы самые реальные рэги были smile

Автор: Ринат 1.4.2005, 09:54
nu ne vopros, mojno smile

Автор: fleetboss 4.8.2009, 17:09
Цитата(Ринат @ 31.3.2005,  11:36)
вот хорошее регулярное выражение для проверки мыла, притом проходят мыла типа [email protected] , POSIX правда

Код

function checkmail($mail)
    {
if (strlen($mail)==0) return false;
        if (ereg("^[_a-zA-Z0-9-]+(\.[_a-zA-Z0-9-]+)*@([a-zA-Z0-9-]+\.)+([a-zA-Z]{2,4})$", $mail))
return true;
    }

Что-то у меня в моем коде не хочет работать твой вариант (с большими и маленькими буквами)...

Код
if(!preg_match("/^[_\.a-zA-Z0-9-]{1,}@[_\.a-zA-Z0-9-]{1,}\.[_\.a-zA-Z0-9-]{2,}$/",$_POST['email'])){ $error=1;


если пишу большую букву - срабатывает $error... где ошибка?

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)