تقييم الموضوع :
  • 0 أصوات - بمعدل 0
  • 1
  • 2
  • 3
  • 4
  • 5
توسيع مجال الأسماء My باستخدام My Extensibility
#3


كتابة التوسع
سنبدأ بتشغيل Visual Studio وإنشاء تطبيق كونسول جديد وتسميته MyValidation وأضافة Module جديدة للمشروع وتسميتها MyValidation.vb ثم استبدل كامل الكود الموجود بالكود التالي


كود :
Imports System.Text.RegularExpressions
Imports System
Imports System.Linq
Imports Microsoft.VisualBasic

Namespace My.Validation
<Global.Microsoft.VisualBasic.HideModuleName()> _
Public Module MyValidationMod
Public Function IsEmpty(ByVal value As Object) As Boolean
If (value Is Nothing) OrElse _
(value Is System.DBNull.Value) OrElse _
(value.ToString = String.Empty) OrElse _
(TypeOf value Is Date AndAlso CDate(value) = Date.MinValue) _
Then
Return True
Else
Return False
End If
End Function

Public Function IsAlphaNumeric(ByVal value As String, _
Optional ByVal emptyOK As Boolean = False, Optional ByVal _
whitespaceOK As Boolean = False) As Boolean
If IsEmpty(value) Then Return emptyOK

Dim expr As String
If whitespaceOK Then
expr = "^[a-zA-Z0-9\s]+$"
Else
expr = "^[a-zA-Z0-9]+$"
End If

Return Regex.IsMatch(value, expr)
End Function

Public Function IsCanadianProvince(ByVal st As String) As Boolean
Dim allProv = "|AB|BC|MB|NB|NL|NT|NS|NU|ON|PE|QC|SK|YT"
Return st.Length = 2 AndAlso allProv.IndexOf("|" & st) <> -1
End Function

Public Function IsUSAState(ByRef st As String) As Boolean
Dim allStates = "|AL|AK|AZ|AR|CA|CO|CT|DE|FL|GA|HI|ID|IL|IN|IA|" & _
"KS|KY|LA|ME|MD|MA|MI|MN|MS|MO|MT|NE|NV|NH|NJ|NM|NY|NC|ND|OH|" & _
"OK|OR|PA|RI|SC|SD|TN|TX|UT|VT|VA|WA|WV|WI|WY"
Return st.Length = 2 AndAlso allStates.IndexOf("|" & st) <> -1
End Function

Public Function IsUSAPostalCode(ByVal zip As String) As Boolean
If String.IsNullOrEmpty(zip) Then Return False

Return Regex.IsMatch(zip, "^\d{5}(-\d{4})?$")
End Function

Public Function IsCanadianPostalCode(ByVal zip As String) As Boolean
If String.IsNullOrEmpty(zip) Then Return False

Return Regex.IsMatch(zip, "^[A-Z]\d[A-Z] \d[A-Z]\d$")
End Function

Public Function IsNorthAmericanPhone(ByRef phone As String) As Boolean
If String.IsNullOrEmpty(phone) Then Return False

Dim expr As String = "^(?:\([2-9]\d{2}\)\ ?|[2-9]\d{2}" & _
"(?:\-?|\ ?))[2-9]\d{2}[- ]?\d{4}$"

Return Regex.IsMatch(phone, expr)
End Function

Public Function IsEmail(ByRef email As String) As Boolean
If String.IsNullOrEmpty(email) Then Return False

Dim localPartCharset = "[0-9a-zA-Z!#$%*/?|\^{}`~&'+\-=_]"
Dim domainPartCharset = "[0-9a-zA-Z\-]"
Dim expr = String.Format("^{0}+(\.{0}+)*@{1}+(\.{1}+)*", _
localPartCharset, domainPartCharset)

Return Regex.IsMatch(email, expr)
End Function
End Module
End Namespace

عليك أن تكون حذرا عندما تقوم بإنشاء قالب My Extension يمكن أن يستخدم في تعريف أي مشروع فيجب عليك الانتباه بشكل خاص إلى القيم المحتملة لـ Option Explicit و Option Strict و Option Compare و Option Infer عندها يمكنك كتابة كودك ليعمل ضمن التعريف الأقل مرونة أو تحديد كل تعريف بشكل خاص في بداية كل ملف كود في توسعتك الذي يعتبر الأمر الأفضل.
كما يجب أن تأخذ إمكانية الاستيرادات المختلفة في المشاريع لتجنب التضارب في الرموز المعرفة على مستوى المشروع وهنا عليك تعديل أي رموز غير معرفة في قالبك بالكلمة المحجوزة Global أو My فمثلا بدلا من استخدام Text.Encoding استخدم Global.Text.Encoding فإن استخدمت Text.Encoding فقط فلن يعمل قالبك في تطبيقات Windows Forms التي ستستورد عندها مجالي أسماء مسميان Text فإن حذفت Global واستخدمت فقط System.Text.Encoding فربما لن يعمل قالبك الذي يحدد مجال أسماء يدعى System. ويعتبر اختبار كودك جيدا قبل توزيعه على الآخرين من الأفكار الجيدة ولا تشذ My Extensions عن هذه القاعدة.
دعنا نستخدم الـ Module التي تم إنشاؤها آليا باسم Module1 لكتابة تجربة لـ My Extensions ويجدر الانتباه إلى انه سيكون من الصعب إعادة استيراد التوسعات عندما تجد شائبة bug لذا عليك محاولة جعل التوسعة تعمل بشكل كامل قدر الإمكان والتأكد من أنها مختبرة جيدا قبل أن تقوم بتصديرها للمرة الأولى. قم بفتح Module1.vb وذلك بالنقر المزدوج عليها في Solution Explorer واستبدل الكود الموجود بالكود التالي ثم اضغط F5 لتشغيل المشروع


كود :
Module Module1
Private testNumber As Integer
Private testGroup As String

Sub StartTestGroup(ByVal name As String)
testGroup = name
testNumber = 0
End Sub

Sub Test(ByVal result As Boolean, ByVal expected As Boolean)
testNumber += 1

If result <> expected Then
Console.WriteLine("Test #{0} of group {1} FAILED.", _
testNumber, testGroup)
End If
End Sub

Sub Main()

StartTestGroup("IsAlphaNumeric")
Test(My.Validation.IsAlphaNumeric("123HH2", True, True), True)


StartTestGroup("IsCanadianPostalCode")
Test(My.Validation.IsCanadianPostalCode("H0H 0H0"), True)


StartTestGroup("IsCanadianProvince")
Test(My.Validation.IsCanadianProvince("ON"), True)


StartTestGroup("IsEmail")
Test(My.Validation.IsEmail("a@b.com"), True)

Console.WriteLine _
("Tests are finished. No FAILED messages indicates success.")
Console.WriteLine("Press any key to continue.")

Console.ReadKey(True)
End Sub
End Module
}}}
تم الشكر بواسطة:


الردود في هذا الموضوع
توسيع مجال الأسماء My باستخدام My Extensibility - بواسطة Raggi Tech - 03-10-12, 12:25 PM

المواضيع المحتمل أن تكون متشابهة .
الموضوع : الكاتب الردود : المشاهدات : آخر رد
  التعامل مع الصور Images في بيئة الدوت نت باستخدام +GDI - مقدمة RaggiTech 3 6,341 30-07-21, 05:14 PM
آخر رد: kebboud
  اصنع محرر أكواد خاص بك باستخدام الأداة RichTextBox السكر المغرور 13 8,182 19-08-18, 09:27 AM
آخر رد: elgokr
  كيفية قراءة ملف باستخدام IntPtr الخاص بالملف silverlight 3 3,964 24-12-16, 03:13 AM
آخر رد: silverlight
  [درس فيديو] تشغيل اوامر Run من البرنامج & مثال غلق الويندوز بعد وقت محدد باستخدام VB.net أحمد النجار 1 4,107 23-12-15, 04:26 AM
آخر رد: الماجيك مسعد
  مقارنة الكلمات و الأسماء العربية برمجيا silverlight 4 4,307 20-12-15, 08:34 PM
آخر رد: silverlight
  [VB.NET] التشفير باستخدام خوارزمية rsa alking-0999 10 8,091 08-07-15, 04:24 PM
آخر رد: مبرمج بلا حدود
  رسم الباركود برمجيا باستخدام (Code128) RaggiTech 3 9,779 06-10-12, 12:51 AM
آخر رد: RaggiTech
  مقال- تطوير الفورم رسم الفورم باستخدام +GDI وتحريكه Moving و تغيير أبعاده Resize RaggiTech 2 4,163 05-10-12, 07:00 PM
آخر رد: RaggiTech
  كيف تقوم بإضافة إجراءاتك الخاصة إلى مجال الأسماء My- توسيع مجال الأسماء My في VB2005 RaggiTech 0 2,050 05-10-12, 01:49 AM
آخر رد: RaggiTech
  مجال الاسماء My{} RaggiTech 0 2,251 04-10-12, 10:14 AM
آخر رد: RaggiTech

التنقل السريع :


يقوم بقرائة الموضوع: بالاضافة الى ( 1 ) ضيف كريم