PDA

View Full Version : اعتبار سنجی در VB



milad-fa
جمعه 23 مهر 1389, 12:56 عصر
سلام دوستان چطور میتونم در VB اعتبار سنجی انجام بدم :
بطور مثال اگر داده های وارد شده در Text1 یک آدرس ایمیل بود MsgBox بده!!

Dr.Bronx
جمعه 23 مهر 1389, 14:09 عصر
برای هر چیزی میتونید یک تابع بنویسید و زمانی که میخواید اعتبار سنجی کنید اون رو فراخوانی کنید .
مثلا برای ایمیل می تونید از کد زیر استفاده کنید

Private Function ValidateEmail(ByRef sEmail As String) As Boolean


Dim bValid As Boolean ' Is email valid?

Dim bFlag As Boolean ' Multipurpose boolean value

Dim vntEmail As Variant ' Splitted Email

Dim vntDomain As Variant ' Splitted Domain

Dim vntValidDomainExt As Variant ' Valid domain extensions

Dim lCount As Long ' Loop variable

Dim lChars As Long ' Second loop variable

' Validates a email of form "a.bc_123@server.ext"

' Insert valid domain extensions in variable
vntValidDomainExt = Array("no", "com", "edu", "gov", "int", "mil", "net", "org", "info", "biz", "pro", "name", "coop", "museum", "aero", _
"af", "al", "dz", "as", "ad", "ao", "ai", "aq", "ag", "ar", "am", "aw", "ac", "au", "at", "az", "bs", _
"bh", "bd", "bb", "By", "be", "bz", "bj", "bm", "bt", "bo", "ba", "bw", "bv", "br", "io", "bn", "bg", _
"bf", "bi", "kh", "cm", "ca", "cv", "ky", "cf", "td", "cs", "cl", "cn", "cx", "cc", "co", "km", "cg", "ck", _
"cr", "ci", "hr", "cu", "cy", "cz", "dk", "dj", "dm", "do", "tp", "ec", "eg", "sv", "gq", "er", "ee", "et", _
"fk", "fo", "fj", "fi", "fr", "gf", "pf", "tf", "ga", "gm", "ge", "de", "gh", "gi", "gr", "gl", "gd", "gp", _
"gu", "gt", "gg", "gn", "gw", "gy", "ht", "hm", "va", "hn", "hk", "hu", "is", "In", "id", "ir", "iq", "ie", _
"im", "il", "it", "jm", "jp", "je", "jo", "kz", "ke", "ki", "kp", "kr", "kw", "kg", "la", "lv", "lb", "ls", "lr", _
"ly", "li", "lt", "lu", "mo", "mk", "mg", "mw", "my", "mv", "ml", "mt", "mh", "mq", "mr", "mu", "yt", _
"mx", "fm", "md", "mc", "mn", "ms", "ma", "mz", "mm", "na", "nr", "np", "nl", "an", "nc", "nz", "ni", _
"ne", "ng", "nu", "nf", "mp", "no", "om", "pk", "pw", "ps", "pa", "pg", "py", "pe", "ph", "pn", "pl", _
"pt", "pr", "qa", "re", "ro", "ru", "rw", "kn", "lc", "vc", "ws", "sm", "st", "sa", "sn", "sc", "sl", "sg", _
"sk", "si", "sb", "so", "za", "gs", "es", "lk", "sh", "pm", "sd", "sr", "sj", "sz", "se", "ch", "sy", "tw", _
"tj", "tz", "th", "tg", "tk", "to", "tt", "tn", "tr", "tm", "tc", "tv", "ug", "ua", "ae", "gb", "uk", "us", _
"um", "uy", "su", "uz", "vu", "ve", "vn", "vg", "vi", "wf", "eh", "ye", "yu", "cd", "zm", "zr", "zw")

' Emails are normally composed of only lower-case characters
' so lower-case the email and since the parameter is ByRef, the
' email will be lower-cased back there.
sEmail = LCase$(sEmail)

' If sEmail contains "@"
If InStr(sEmail, "@") Then
' Split email on "@"
vntEmail = Split(sEmail, "@")

' Asuure only 1 "@"
If UBound(vntEmail) = 1 Then

' Starts with alphanumeric character
If Mid$(vntEmail(0), 1, 1) Like "[a-z]" Or Mid$(vntEmail(0), 1, 1) Like "[0-9]" Then
bFlag = True

' Assure all other characters are alphanumeric or "." or "_"
For lCount = 2 To Len(vntEmail(0))

If Not (Mid$(vntEmail(0), lCount, 1) Like "[a-z]" Or Mid$(vntEmail(0), lCount, 1) Like "[0-9]" Or Mid$(vntEmail(0), lCount, 1) = "." Or Mid$(vntEmail(0), lCount, 1) Like "_") Then bFlag = False
Next lCount

If bFlag Then

' If domain part contains "."
If InStr(vntEmail(1), ".") Then
' Split domains on "."
vntDomain = Split(vntEmail(1), ".")
bFlag = True

' Assure all domains characters are alphanumeric and domain length is over 1 (>= 2)
For lCount = LBound(vntDomain) To UBound(vntDomain)

If Len(vntDomain(lCount)) < 2 Then bFlag = False

For lChars = 1 To Len(vntDomain(lCount))

If Not (Mid$(vntDomain(lCount), lChars, 1) Like "[a-z]" Or Mid$(vntDomain(lCount), lChars, 1) Like "[0-9]") Then bFlag = False
If Not bFlag Then Exit For
Next lChars

If Not bFlag Then Exit For
Next lCount

If bFlag Then
bFlag = False

' Check if email domain extension is valid
For lCount = LBound(vntValidDomainExt) To UBound(vntValidDomainExt)

If vntDomain(UBound(vntDomain)) = vntValidDomainExt(lCount) Then
bFlag = True

Exit For

End If

Next lCount

If bFlag Then
' If email has passed through all this, it's valid
bValid = True
End If
End If
End If
End If
End If
End If
End If

ValidateEmail = bValid
End Sub

وقتی میخواید چک کنید باید string رو به تابع پاس بدید و نتیجه خروجی True یا False است .

یا برای اینکه ببینید که فقط نوشته داخل textbox شما عدد هست می تونید از تابع IsNumeric استفاده کنید .

شما باید دقیقا مشخص کنید که چه چیزی رو میخواید اعتبار سنجی کنید .

موفق باشید ./

milad-fa
جمعه 23 مهر 1389, 14:31 عصر
ممنون از لطفت.
یعنی خود Vb تابعی برای این کار نداره(مثل asp)؟!
من ایمیل رو به عنوان مثال عرض کردم.
من میخوام این رو پیاده سازی کنم :
اگه 5 تای اول عدد بود ، بعد یه space ، بعد یک - ، بعد space ، بعد 10 تا عدد ، بعد یه خط پایین تر enter ، بعد 10 تا حرف فقط(عدد و کاراکتر نه) عملیات ثبت رو انجام بده.
یعنی واسه این کار خودم ماژول بنویسم:ناراحت:!!!
یعنی هیچ dll ، ماژول و ... وجود نداره که بصورت داینامیک بشه بهش مقدار داد(مثل asp)؟

milad-fa
جمعه 23 مهر 1389, 14:50 عصر
راستی ماژول نوشته شده خوب بود ولی یه مشکل داره اونم اینه که تمامی آدرس ایمیل ها به حوضه ی دو یا سه کاراکتری ختم نمیشن مثلاً steve@aol یک آدرس ایمیل هستش ولی ماژول بالا مقدار false برمیگردونه!
دوستان اگه ماژول یا dll دارید بشه مثل asp ازش استفاده کرد لطفاً معرفی کنید ممنون میشم.
مثلاً در ASP با این FORMAT :
{S+@\S+\.\S{2,3\
اعتبار سنجی برای آدرس ایمیل انجام میشه.

xxxxx_xxxxx
جمعه 23 مهر 1389, 15:12 عصر
سلام،
از رویداد Validate شی TextBox (http://barnamenevis.org/forum/showpost.php?p=687461&postcount=7) به همراه عملگر Like (http://barnamenevis.org/forum/showthread.php?t=165531) هم میتونید استفاده کنید.

milad-fa
جمعه 23 مهر 1389, 18:37 عصر
سلام،
از رویداد Validate شی TextBox (http://barnamenevis.org/forum/showpost.php?p=687461&postcount=7) به همراه عملگر Like (http://barnamenevis.org/forum/showthread.php?t=165531) هم میتونید استفاده کنید.
با تشکر از جناب xxxxx_xxxxx
عملگر like عالی بود ولی یه سوال داشتم :

اگه 5 تای اول عدد بود ، بعد یه space ، بعد یک - ، بعد space ، بعد 10 تا عدد ، بعد یه خط پایین تر enter ، بعد 10 تا حرف فقط(عدد و کاراکتر نه) عملیات ثبت رو انجام بده.
این یه خط پایین تر رو چه جوری بگم؟آیا علامت خاصی داره؟اگه نداره چطوری باید تعداد خطوط نوشته شده در یک text که multiline هست رو باید بدست بیارم؟!
با تشکر.
مرسی.

vbhamed
جمعه 23 مهر 1389, 21:57 عصر
سلام

Dim x() As String

x = split(text1.text, vbcrlf)

msgbox UBound(x)

'x(0) : Line1
'x(1) : Line2
'.
'.
'.