В коллекцию: e-mail

Статус
В этой теме нельзя размещать новые ответы.
Фигово в кодинге рулю, но думаю в регулярку перекинуть параметры которые я тут сейчас опишу спецам труда не составит. Это посложнее чем регулярка ТС и другие, зато по опыту она пообьективнее будет :)
начало в принцепе тоже: [a-zA-Z0-9] <-это признак первой буквы в мыле.
дальше вторая и последующие буквы: [a-zA-Z0-9.-_]
дальше ессно @ либо (dot) либо (собака) либо.... тут уже сами фантазируем :)
доменная часть: [a-zA-Z0-9.-_]
теперь дополнительные условия которые оградят от очень большого количества мусора:
1) общая длинна мыла больше 7 символов и меньше 128
2) .-_ эти знаки никогда не идут 2 раза подряд
3) доменная часть всегда оканчивается на конкретный список зон:
Код:
ac
ad
ae
aero
af
ag
ai
al
am
an
ao
aq
ar
as
asia
at
au
aw
ax
az
ba
bb
bd
be
bf
bg
bh
bi
biz
bj
bl
bm
bn
bo
br
bs
bt
bv
bw
by
bz
ca
cat
cc
cd
cf
cg
ch
ci
ck
cl
cm
cn
co
com
coop
cr
cu
cv
cx
cy
cz
de
dj
dk
dm
do
dz
ec
edu
ee
eg
eh
er
es
et
eu
fi
fj
fk
fm
fo
fr
ga
gb
gd
ge
gf
gg
gh
gi
gl
gm
gn
gov
gp
gq
gr
gs
gt
gu
gw
gy
hk
hm
hn
hr
ht
hu
id
ie
il
im
in
info
int
io
iq
ir
is
it
je
jm
jo
jobs
jp
ke
kg
kh
ki
km
kn
kp
kr
kw
ky
kz
la
lb
lc
li
lk
lr
ls
lt
lu
lv
ly
ma
mc
md
me
mf
mg
mh
mil
mk
ml
mm
mn
mo
mobi
mp
mq
mr
ms
mt
mu
museum
mv
mw
mx
my
mz
na
name
nc
net
nf
ng
ni
nl
no
np
nr
nu
nz
om
org
pa
pe
pf
pg
ph
pk
pl
pm
pn
pr
pro
ps
pt
pw
py
qa
re
ro
rs
ru
rw
sa
sb
sc
sd
se
sg
sh
si
sj
sk
sl
sm
sn
so
sr
st
su
sv
sy
sz
tc
td
tel
tf
tg
th
tj
tk
tl
tm
tn
to
tp
tr
travel
tt
tv
tw
tz
ua
ug
uk
um
us
uy
uz
va
vc
ve
vg
vi
vn
vu
wf
ws
ye
yt
yu
za
zm
zw
4) условие окончание парсинга емайла наличие точки, любой из вышеперечисленных зон и отсутствие после этого любого знака из диапазона [a-zA-Z0-9.-_]
достаточно громозко, но зато надпись типа mailto:ya@ya.ru будет воспринята как емайл без mailto: а запись типа 123:123@192.168.1.1 не будет воспринята как мыло вообще. Кроме того не будет восприниматься как емайл знак @ в названиях файлов и магнетт ссылках р2р сетей. А вот все возможные именно мыла она выбирать будет и запись типа
она однозначно опраделит как содержащую одно мыло dim@test.com
 
Не уверен то ли что надо, но парсит мыльники со страниц.
Только не забывать http:// указывать если с инета.

Код:
<?php
if (!isset($_REQUEST["url"])) {
	echo '<form action="index.php" name="form" method="post">';
	echo '<input type="text" name="url" size="128" value="Enter URL for mail-parsing">';
	echo '<input type="submit" name="submit" value="Parse">';
	echo '</form>';
}
else {    	
	$string = file_get_contents($url);
	$string = preg_replace("/\(dog\)|\(собака\)|\(сабака\)|\(at\)/", "@",$string);
	$string = preg_replace("/\(dot\)|\(point\)/", ".",$string);
	preg_match_all("/[a-zA-Z0-9]{1}[-_\.a-zA-Z0-9]*[a-zA-Z0-9]{1}(?:@|\(dot\)|\(собака\)|\(at\))[a-zA-Z0-9]{1}[-\.a-zA-Z0-9]*[a-zA-Z0-9]{1}\.(?:ac|ad|ae|aero|af|ag|ai|al|am|an|ao|aq|ar|as|asia|at|au|aw|ax|az|ba|bb|bd|be|bf|bg|bh|bi|biz|bj|bl|bm|bn|bo|br|bs|bt|bv|bw|by|bz|ca|cat|cc|cd|cf|cg|ch|ci|ck|cl|cm|cn|co|com|coop|cr|cu|cv|cx|cy|cz|de|dj|dk|dm|do|dz|ec|edu|ee|eg|eh|er|es|et|eu|fi|fj|fk|fm|fo|fr|ga|gb|gd|ge|gf|gg|gh|gi|gl|gm|gn|gov|gp|gq|gr|gs|gt|gu|gw|gy|hk|hm|hn|hr|ht|hu|id|ie|il|im|in|info|int|io|iq|ir|is|it|je|jm|jo|jobs|jp|ke|kg|kh|ki|km|kn|kp|kr|kw|ky|kz|la|lb|lc|li|lk|lr|ls|lt|lu|lv|ly|ma|mc|md|me|mf|mg|mh|mil|mk|ml|mm|mn|mo|mobi|mp|mq|mr|ms|mt|mu|museum|mv|mw|mx|my|mz|na|name|nc|net|nf|ng|ni|nl|no|np|nr|nu|nz|om|org|pa|pe|pf|pg|ph|pk|pl|pm|pn|pr|pro|ps|pt|pw|py|qa|re|ro|rs|ru|rw|sa|sb|sc|sd|se|sg|sh|si|sj|sk|sl|sm|sn|so|sr|st|su|sv|sy|sz|tc|td|tel|tf|tg|th|tj|tk|tl|tm|tn|to|tp|tr|travel|tt|tv|tw|tz|ua|ug|uk|um|us|uy|uz|va|vc|ve|vg|vi|vn|vu|wf|ws|ye|yt|yu|za|zm|zw)(?![a-zA-Z0-9\.-])/",$string, $out);
	foreach ($out[0] as $mail) {
		echo $mail."<br />";
	}
}
?>

Добавил парсинг с учетом:
(собака), (сабака), (dog), (at) -> @
(dot), (point) -> .
 
Код:
[a-zA-Z0-9]+(?:[._-][a-zA-Z0-9]+)*(?:@|\(at\))
[a-zA-Z0-9]+(?:[._-][a-zA-Z0-9]+)*
\.(?:ru|com)(?![._a-zA-Z0-9-])
Вместо (?:mad:|\(at\)) и (?:ru|com) подставить свой список.
1) общая длинна мыла больше 7 символов и меньше 128
- лучше проверить из языка. В регулярке проверить можно, но за ее скорость не ручаюсь:) Либо использовать специальные возможности диалекта регулярных выражений- Perl, .NET
4) условие окончание парсинга емайла наличие точки, любой из вышеперечисленных зон и отсутствие после этого любого знака из диапазона [a-zA-Z0-9.-_]
Точку, ИМХО, лучше оставить. Е-маил может стоять в конце приедложения.
 
есть ли ещё какие не будь модули проверки, например проверить сам сервер и его аккаунт, вроде где то я такое видел у кого небудь есть ?:confused:
 
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху