не могу написать проверку е-мейла, помогите :)

VovkaS

Guest
не могу написать проверку е-мейла, помогите :)

Почитал доку... нашел примеры но въехать, хоть убей, не могу.
И примеры не хотят работать.

Есть пример с ereg (я думаю сюда пойдет eregi)
function valid_email ($adr) {
return (ereg('^[-!#$%&\'*+\\./0-9=?A-Z^_`a-z{|}~]+'.
'@'.
'[-!#$%&\'*+\\/0-9=?A-Z^_`a-z{|}~]+\.'.
'[-!#$%&\'*+\\./0-9=?A-Z^_`a-z{|}~]+$',
$adr));
}

Он мне постоянно выдает что я ввел неправильный емейл.

И второй с preg_match

function checkmail($mail)
{
// режем левые символы и крайние пробелы
$mail=trim(pregtrim($mail));
// если пусто - выход
if (strlen($mail)==0) return 1;
if (!preg_match("/^[a-z0-9_-]{1,20}@(([a-z0-9-]+\.)+(com|net|org|mil|"."edu|ru|gov|arpa|info|biz|inc|name|[a-z]{2})|[0-9]{1,3}\.[0-9]{1,3}\.[0-"."9]{1,3}\.[0-9]{1,3})$/is",$mail)) return -1;
return $mail;
}
Он у меня зависает.

Если есть у кого желание подскажите как работать с этими preg_match или ereg в примерах столько наколбысили, что я совсем запутался где там string pattern, string string а где array regs
:(
 

DimbIch

Новичок
имхо тут с регеспами траблы.....

preg_match ( string pattern, string subject [, array &matches [, int flags [, int offset]]])

т.е. preg_match('#твой регесп#',$where_to_find,$where_to write_results); - это если грубо описать
 

VovkaS

Guest
Я начал с примера по проще
<?
$phone="15521242";

if (preg_match ("/[0-9]/", "$phone"))
{
print "A match was found.";
} else {
print "A match was not found.";
}
?>
Плучаю - A match was found.
Что, в общем и требовалос.
Но как приделать данную функцию для проверки поля - ТЕЛЕФОН из формы. Тут ведь выжно не то, что данные знаки найдены а то, что тут нет ничего кроме этих знаков.
 

usascha

Новичок
Эта тема обсуждалась много раз. Учитесь усерднее искать.

Вот код, который я нашел сам:

<script language="JavaScript1.2">
function isEmail(str) {
var supported = 0;
if (window.RegExp) {
var tempStr = "a";
var tempReg = new RegExp(tempStr);
if (tempReg.test(tempStr)) supported = 1;
}
if (!supported)
return (str.indexOf(".") > 2) && (str.indexOf("@") > 0);
var r1 = new RegExp("(@.*@)|(\\.\\.)|(@\\.)|(^\\.)");
var r2 = new RegExp("^.+\\@(\\[?)[a-zA-Z0-9\\-\\.]+\\.([a-zA-Z]{2,3}|[0-9]{1,3})(\\]?)$");
return (!r1.test(str) && r2.test(str));
}
</script>
<input type=text name=user_mail style="width:150px" onChange="if (isEmail(document.forms['registered'].user_mail.value)) { alert('Адрес правильный! Спасибо.'); } else alert('Адрес неправильный!');">
 

VovkaS

Guest
usascha класно :) а если жабаскрипт у человека отключен?
Поэтому я пытаюсь писать сразу на PHP
 

DimbIch

Новичок
Автор оригинала: VovkaS
Я начал с примера по проще
<?
$phone="15521242";

if (preg_match ("/[0-9]/", "$phone"))
{
print "A match was found.";
} else {
print "A match was not found.";
}
?>
Плучаю - A match was found.
Что, в общем и требовалос.
Но как приделать данную функцию для проверки поля - ТЕЛЕФОН из формы. Тут ведь выжно не то, что данные знаки найдены а то, что тут нет ничего кроме этих знаков.
preg_match ("/[^0-9]/", $phone);
вот это будет искать все символы КРОМЕ 0-9 - и если найдет значит тел не правильный...
ВНИМАТЕЛЬНЕЕ ЧИТАЙ ПРО РЕГЕСПЫ
 

VovkaS

Guest
кроме того мне нужно проверять поля с телефоном, ICQ
поэтому разобраться с этими делами было бы true :)

-~{}~ 09.11.04 23:21:

DimbIch а я то думаю, что это за крыша ^ :)
 

usascha

Новичок
на php тоже не так уж трудно найти даже для применения без модификаций. Мой вариант лучше, т.к. проверяет без перезагрузки страницы.
 

Strannik73

Guest
нашел вот вариант проверки в справочнике по PHP3, но он работает и под php5.
немного доработал его под собственные нужды (корневой домен д.б. либо ru, либо com, либо ... )

PHP:
function checkemail($mail)
{
if (ereg("^(.+)@(.+)\\.(.+)$",$mail,$arr))
{ // содержит все три части адреса
	if (ereg("^[a-zA-Z]+$",$arr[3])) //домен верхнего уровня состоит из букв
	{
$a= array('ru','su','com','net','org'); // домен третьего уровня д.б в списке $a
if (in_array($arr[3],$a))
		return 1;
		else 
		return 0;
	}
	else return 0;
}
else 
 return 0;
}
 

VovkaS

Guest
DimbIch вроде нашел инфу :)
http://detail.phpclub.net/article/regexp_1
 

VovkaS

Guest
Вот пример:
<?php
$user = "uSrrr";
if(!preg_match("/^[a-zA-Z0-9]+$/", $user)) {
echo "Неправильн!!";
} else {
echo "ОК";
}
?>
Для данного примера нужен всего один знак! отвечающий услоуию [a-zA-Z0-9] а как сделать что как минимум 5 знаков?
конструкция типа [a-zA-Z0-9]{5} = только 5 знаков
А как задать от допустим от 3 до 9 ?
 

DimbIch

Новичок
VovkaS
http://detail.phpclub.net/article/regexp_1
http://detail.phpclub.net/article/regexp_2
ЧИТАТЬ ВНИМАТЕЛЬНО..!!!!!!!!

myname
плиз не давай ответов конкретных...
учиться не будет народ.. а форум для этого и сделан...
 

VovkaS

Guest
DimbIch просмотрел статью еще раз и О ЧУДО там все написано, только теперь то я знаю, что нужно искать и на, что обращать внимание. А до этого просто не въезжал.
Но процес пошел, уже написал свою проверку....

А как задать кирилический интервал? [а-ъ]
 

SiMM

Новичок
Если кодировка - Windows-1251 - то [а-я] (как известно, последняя буква алфавита далеко не твёрдый знак ;) ) с модификатором i должно быть достаточно.
 
Сверху