Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / PowerBuilder [игнор отключен] [закрыт для гостей] / Проверка правильности написания e-maila / 14 сообщений из 14, страница 1 из 1
02.11.2006, 15:54
    #34101446
Riska
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проверка правильности написания e-maila
Не хочется изобретать велосипед. Наверняка кто-нибудь уже написал функцию по проверке правильности написания e-maila. Ну, типа, должна быть собачка и т.д. и т.п. Пришлите, плз...
...
Рейтинг: 0 / 0
02.11.2006, 19:49
    #34102257
voronk
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проверка правильности написания e-maila
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)
...
Рейтинг: 0 / 0
02.11.2006, 20:33
    #34102292
Филипп
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проверка правильности написания e-maila
voronkwww.google.com .....

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

Код: plaintext
1.
2.
3.
4.
( 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 )


Аффтор - я :-))
...
Рейтинг: 0 / 0
02.11.2006, 20:44
    #34102304
voronk
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проверка правильности написания e-maila
Филипп voronkwww.google.com .....

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

Код: plaintext
1.
2.
3.
4.
( 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 )


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

...
Рейтинг: 0 / 0
03.11.2006, 11:27
    #34103386
AndrewN
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проверка правильности написания e-maila
Медаль бы ему. :)
...
Рейтинг: 0 / 0
03.11.2006, 22:58
    #34105369
voronk
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проверка правильности написания e-maila
AndrewNМедаль бы ему. :)
...
...
Рейтинг: 0 / 0
05.11.2006, 09:30
    #34106205
Riska
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проверка правильности написания e-maila
А у меня эта радость не работает...
Проверка происходит в простом sle_1 (не в DW). Ответ всегда FALSE!

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
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
...
Рейтинг: 0 / 0
05.11.2006, 09:40
    #34106206
Riska
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проверка правильности написания e-maila
Кстати, забыл сказать, что это PB 6.5.1, хотя не думаю, что это имеет значение.
...
Рейтинг: 0 / 0
05.11.2006, 15:35
    #34106342
Anatoly Moskovsky
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проверка правильности написания e-maila
Я бы предложил такое регулярное выражение:
Код: plaintext
/^([\w_\-\.]+\@[\w\-]+(?:\.[\w\-]+)*)\.(info|biz|com|org|net|mil|gov|[a-z]{ 2 })$/
Но к сожалению ф-я Match многое не умеет, поэтому для его применения потребуется внешний ActiveX (впрочем он кажется входит в состав Windows начиная с 98):
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
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. В этом коде нет обработки ошибок.
...
Рейтинг: 0 / 0
05.11.2006, 17:48
    #34106403
Riska
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проверка правильности написания e-maila
Anatoly Moskovsky
Это работает. Спасибо. Но все-таки лучше использовать функцию без оле-объектов.
...
Рейтинг: 0 / 0
06.11.2006, 20:37
    #34107677
voronk
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проверка правильности написания e-maila
RiskaА у меня эта радость не работает...
Проверка происходит в простом sle_1 (не в DW). Ответ всегда FALSE!

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
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 ...
...
Рейтинг: 0 / 0
06.11.2006, 20:40
    #34107680
Филипп
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проверка правильности написания e-maila
RiskaА у меня эта радость не работает...
Проверка происходит в простом sle_1 (не в DW).
SLE это тебе НЕ datawindow...
...
Рейтинг: 0 / 0
07.11.2006, 13:27
    #34108963
Oleg1
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проверка правильности написания e-maila
RiskaА у меня эта радость не работает...
Проверка происходит в простом sle_1 (не в DW). Ответ всегда FALSE!
Функция Match() в DW и в скриптах работает по-разному! Как минимум в PB9
...
Рейтинг: 0 / 0
07.11.2006, 14:10
    #34109121
Anatoly Moskovsky
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проверка правильности написания e-maila
Oleg1 RiskaА у меня эта радость не работает...
Проверка происходит в простом sle_1 (не в DW). Ответ всегда FALSE!
Функция Match() в DW и в скриптах работает по-разному! Как минимум в PB9
Насчет Match не в курсе.
Но есть еще одна причина, по которой это выражение будет давать отличный от DW результат.
Абстрагируясь от конкретных операций, это условие можно представить в таком виде:
Код: plaintext
(NOT P1 OR NOT (P2) AND P3)) AND NOT (P4 OR P5 OR P6 OR P7 OR P8 OR P9)
Здесь мы видим такую часть как
Код: plaintext
NOT P1 OR NOT P2 AND P3

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

Это описано в документации.
См. PB Help->
Operator precedence in DataWindow expressions,
Operator precedence in PowerBuilder expressions
...
Рейтинг: 0 / 0
Форумы / PowerBuilder [игнор отключен] [закрыт для гостей] / Проверка правильности написания e-maila / 14 сообщений из 14, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]