Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / PowerBuilder Новый топик    Ответить
 Проверка правильности написания e-maila  [new]
Riska
Member

Откуда: Израиль
Сообщений: 989
Не хочется изобретать велосипед. Наверняка кто-нибудь уже написал функцию по проверке правильности написания e-maila. Ну, типа, должна быть собачка и т.д. и т.п. Пришлите, плз...
2 ноя 06, 15:54    [3348383]     Ответить | Цитировать Сообщить модератору
 Re: Проверка правильности написания e-maila  [new]
voronk
Member

Откуда: Оттуда...
Сообщений: 548
www.google.com .....

Here is a validation expression which works (95% :-)) for an email address
entry in a datawindow

( NOT Match(GetText(),"[^A-Za-z0-9\.@_\-]") OR NOT (Match(GetText(),"[@+]")
AND Match(GetText(),"[/.+]"))) AND NOT (pos(GetText(), ".") = 1 OR
pos(GetText(), ".", Len(GetText())-1) = Len(GetText()) OR pos(GetText(),
"@") = 1 OR pos(GetText(), "@", Len(GetText())-1) = Len(GetText()) OR
Pos(GetText(),".@")>0 OR Pos(GetText(),"@.")>0)
2 ноя 06, 19:49    [3350014]     Ответить | Цитировать Сообщить модератору
 Re: Проверка правильности написания e-maila  [new]
Филипп
Member

Откуда: Boston, MA, USA (c 1989 ) б. Москва
Сообщений: 1880
voronk
www.google.com .....

Here is a validation expression which works (95% :-)) for an email address
entry in a datawindow

( NOT Match(GetText(),"[^A-Za-z0-9\.@_\-]") OR NOT (Match(GetText(),"[@+]") 
AND Match(GetText(),"[/.+]"))) AND NOT (pos(GetText(), ".") = 1 OR 
pos(GetText(), ".", Len(GetText())-1) = Len(GetText()) OR pos(GetText(), 
"@") = 1 OR pos(GetText(), "@", Len(GetText())-1) = Len(GetText()) OR 
Pos(GetText(),".@")>0 OR Pos(GetText(),"@.")>0)


Аффтор - я :-))
2 ноя 06, 20:33    [3350100]     Ответить | Цитировать Сообщить модератору
 Re: Проверка правильности написания e-maila  [new]
voronk
Member

Откуда: Оттуда...
Сообщений: 548
Филипп
voronk
www.google.com .....

Here is a validation expression which works (95% :-)) for an email address
entry in a datawindow

( NOT Match(GetText(),"[^A-Za-z0-9\.@_\-]") OR NOT (Match(GetText(),"[@+]") 
AND Match(GetText(),"[/.+]"))) AND NOT (pos(GetText(), ".") = 1 OR 
pos(GetText(), ".", Len(GetText())-1) = Len(GetText()) OR pos(GetText(), 
"@") = 1 OR pos(GetText(), "@", Len(GetText())-1) = Len(GetText()) OR 
Pos(GetText(),".@")>0 OR Pos(GetText(),"@.")>0)


Аффтор - я :-))


Картинка с другого сайта. Картинка с другого сайта. Картинка с другого сайта.
2 ноя 06, 20:44    [3350121]     Ответить | Цитировать Сообщить модератору
 Re: Проверка правильности написания e-maila  [new]
AndrewN
Member

Откуда: W4
Сообщений: 119
Медаль бы ему. :)
3 ноя 06, 11:27    [3352129]     Ответить | Цитировать Сообщить модератору
 Re: Проверка правильности написания e-maila  [new]
voronk
Member

Откуда: Оттуда...
Сообщений: 548
AndrewN
Медаль бы ему. :)

...

К сообщению приложен файл. Размер - 0Kb
3 ноя 06, 22:58    [3356232]     Ответить | Цитировать Сообщить модератору
 Re: Проверка правильности написания e-maila  [new]
Riska
Member

Откуда: Израиль
Сообщений: 989
А у меня эта радость не работает...
Проверка происходит в простом sle_1 (не в DW). Ответ всегда FALSE!

IF ( NOT Match(as_email,"[^A-Za-z0-9\.@_\-]") OR NOT (Match(as_email,"[@+]") &
		AND Match(as_email,"[/.+]"))) AND NOT (pos(as_email, ".") = 1 OR &
		pos(as_email, ".", Len(as_email)-1) = Len(as_email) OR pos(as_email, &
		"@") = 1 OR pos(as_email, "@", Len(as_email)-1) = Len(as_email) OR &
		Pos(as_email,".@")>0 OR Pos(as_email,"@.")>0) THEN
	MESSAGEBOX(as_email, 'FALSE')
ELSE 
	MESSAGEBOX(as_email, 'TRUE')
END IF
5 ноя 06, 09:30    [3357745]     Ответить | Цитировать Сообщить модератору
 Re: Проверка правильности написания e-maila  [new]
Riska
Member

Откуда: Израиль
Сообщений: 989
Кстати, забыл сказать, что это PB 6.5.1, хотя не думаю, что это имеет значение.
5 ноя 06, 09:40    [3357746]     Ответить | Цитировать Сообщить модератору
 Re: Проверка правильности написания e-maila  [new]
Anatoly Moskovsky
Member

Откуда: Odessa
Сообщений: 6610
Я бы предложил такое регулярное выражение:
/^([\w_\-\.]+\@[\w\-]+(?:\.[\w\-]+)*)\.(info|biz|com|org|net|mil|gov|[a-z]{2})$/
Но к сожалению ф-я Match многое не умеет, поэтому для его применения потребуется внешний ActiveX (впрочем он кажется входит в состав Windows начиная с 98):
String ls_email = "a-b.c@ss-ee.c.com"

Boolean lb_validEmail
String ls_re = "^([\w_\-\.]+\@[\w\-]+(?:\.[\w\-]+)*)\.(info|biz|com|org|net|mil|gov|[a-z]{2})$"
OLEObject re
int li_retcode
String ls_dest
re = Create OLEObject
li_retcode = re.ConnectToNewObject("VBScript.RegExp")
re.Pattern = ls_re
re.Global = false
re.IgnoreCase = true
lb_validEmail = re.Test(ls_email)
re.DisconnectObject()

MessageBox("Valid", lb_validEmail)
PS. В этом коде нет обработки ошибок.
5 ноя 06, 15:35    [3357963]     Ответить | Цитировать Сообщить модератору
 Re: Проверка правильности написания e-maila  [new]
Riska
Member

Откуда: Израиль
Сообщений: 989
Anatoly Moskovsky

Это работает. Спасибо. Но все-таки лучше использовать функцию без оле-объектов.
5 ноя 06, 17:48    [3358072]     Ответить | Цитировать Сообщить модератору
 Re: Проверка правильности написания e-maila  [new]
voronk
Member

Откуда: Оттуда...
Сообщений: 548
Riska
А у меня эта радость не работает...
Проверка происходит в простом sle_1 (не в DW). Ответ всегда FALSE!

IF ( NOT Match(as_email,"[^A-Za-z0-9\.@_\-]") OR NOT (Match(as_email,"[@+]") &
		AND Match(as_email,"[/.+]"))) AND NOT (pos(as_email, ".") = 1 OR &
		pos(as_email, ".", Len(as_email)-1) = Len(as_email) OR pos(as_email, &
		"@") = 1 OR pos(as_email, "@", Len(as_email)-1) = Len(as_email) OR &
		Pos(as_email,".@")>0 OR Pos(as_email,"@.")>0) THEN
	MESSAGEBOX(as_email, 'FALSE')
ELSE 
	MESSAGEBOX(as_email, 'TRUE')
END IF


Try ->
IF ( Match(as_email,"[^A-Za-z0-9\.@_\-]") = FALSE OR ...
vs
IF ( NOT Match(as_email,"[^A-Za-z0-9\.@_\-]") OR ...
6 ноя 06, 20:37    [3360494]     Ответить | Цитировать Сообщить модератору
 Re: Проверка правильности написания e-maila  [new]
Филипп
Member

Откуда: Boston, MA, USA (c 1989 ) б. Москва
Сообщений: 1880
Riska
А у меня эта радость не работает...
Проверка происходит в простом sle_1 (не в DW).

SLE это тебе НЕ datawindow...
6 ноя 06, 20:40    [3360499]     Ответить | Цитировать Сообщить модератору
 Re: Проверка правильности написания e-maila  [new]
Oleg1
Member

Откуда:
Сообщений: 121
Riska
А у меня эта радость не работает...
Проверка происходит в простом sle_1 (не в DW). Ответ всегда FALSE!

Функция Match() в DW и в скриптах работает по-разному! Как минимум в PB9
7 ноя 06, 13:27    [3362851]     Ответить | Цитировать Сообщить модератору
 Re: Проверка правильности написания e-maila  [new]
Anatoly Moskovsky
Member

Откуда: Odessa
Сообщений: 6610
Oleg1
Riska
А у меня эта радость не работает...
Проверка происходит в простом sle_1 (не в DW). Ответ всегда FALSE!

Функция Match() в DW и в скриптах работает по-разному! Как минимум в PB9

Насчет Match не в курсе.
Но есть еще одна причина, по которой это выражение будет давать отличный от DW результат.
Абстрагируясь от конкретных операций, это условие можно представить в таком виде:
(NOT P1 OR NOT (P2) AND P3)) AND NOT (P4 OR P5 OR P6 OR P7 OR P8 OR P9)
Здесь мы видим такую часть как
NOT P1 OR NOT P2 AND P3

Так вот.
В DW expression приоритет операций будет такой:
NOT (P1 OR NOT (P2 AND P3))
А в PowerScript такой:
(NOT P1) OR ((NOT P2) AND P3)
Очевидно, что это совершенно разные условия.

Это описано в документации.
См. PB Help->
Operator precedence in DataWindow expressions,
Operator precedence in PowerBuilder expressions
7 ноя 06, 14:10    [3363134]     Ответить | Цитировать Сообщить модератору
Все форумы / PowerBuilder Ответить