الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

ماهي أفضل Regualr expression للContactNo

مغلق
بدأه وليد محمد الحسن في 4 مارس 2006 · 11 رد · 1,379 مشاهدة · في Microsoft Visual Basic.NET
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

كما هو معلوم لابد من عمل Validation لأي بيانات مدخلة بواسطة المستخدم، ومن ضمن تلك البيانات أرقام الاتصال Contact No. وتشمل رقم الهاتف، رقم الجوال، رقم الفاكس.

كما نعلم تختلف طريقة إدخال هذه الأرقام، فالبعض يكتب رقم الهاتف مثلا:

00249183445566

ليكون الRegualr Expression هكذا:

^\d$

أو

249183445566+
^[+](\d){6-14}$

أو

249 183 445566+
^(\d) (+\d){2,3} (\s\d){2,3} (\d){6,8}$

أو

+249 1 - 83 - (445566)

هذا مع الأخذ في الاعتبار وجود مفتاح الدولة أومفتاح المنطقة أو كليهما أو عدم وجودهما.

فماهي أنسب regualr expression في رأيكم بحيث تشمل كل الاحتمالات الممكنة؟

تم تعديل هذه المشاركة بواسطة walcom في 4 مارس 2006 في 13:42

فكر بطريقة أخرى

#2

انا بخليها مفتوحة للمستخدم

بحيث انة يتحكم فيها

و أريح راسي

وفوق كل ذي علم عليم

http://www.leaderstechnology.com

-------------------------------

#3

طيب لو قام المستخدم بإدخال حروف alphabetic characters وسط الأرقام، هل سيظل رقم الاتصال صالحا بعدها؟

يجب استبعاد هذا الاحتمال مع عدم تقييد المستخدم على طريقة إدخال محددة.

للرفع.

فكر بطريقة أخرى

#4

مجرد فكرة:

طيب ليش ما تستخدم أكثر من عبارة لعمل الفاليديشن يعني إذا كان مطابق لأي واحدة فيكون مقبول و عندما لايطابق ولا واحدة فيكون غير مقبول

عن عائشة رضي الله عنها أن النبي صلى الله عليه وسلم قال: إن الله يحب إذا عمل أحدكم عملا أن يتقنه

نعيب زماننا والعيب فينا ... وما لزماننا عيب سوانا

ونهجو ذا الزمان بغير ذنب ... ولو نطق الزمان لنا هجانا

محمد سامر أبو سلو

#5

يمكنكم التحكم بطريقة اخرى وهي إجبار المستخدم على كتابة أرقام فقط في هذه الخانات

' إدخال أرقام فقط

    Public Function PressOnlyNumeric(ByVal intKeyValue As System.Windows.Forms.KeyPressEventArgs) ' Integer
        Dim chKiy As Char
        chKiy = intKeyValue.KeyChar
        If Not (Char.IsDigit(chKiy) Or chKiy = "." Or Char.IsControl(chKiy)) Then
            MsgBox("غير مسموح بإدخال الحرف .. فضلاً إدخل أرقام فقط", MsgBoxStyle.MsgBoxRight + MsgBoxStyle.Critical, "إدخال خاطئ")
            intKeyValue.Handled = True ' إلغاء الحرف المضغوط
        End If

    End Function
#6

الأخ aswany

اقتباس
يمكنكم التحكم بطريقة اخرى وهي إجبار المستخدم على كتابة أرقام فقط في هذه الخانات

' إدخال أرقام فقط

لاحظ وجود احتمال إدخال الحروف + و () و -

اقتباس
طيب ليش ما تستخدم أكثر من عبارة لعمل الفاليديشن يعني إذا كان مطابق لأي واحدة فيكون مقبول و عندما لايطابق ولا واحدة فيكون غير مقبول

فكرة برضو. *-)

مع أنها قد تؤدي في النهاية لتعقيد الvalidation process

تم تعديل هذه المشاركة بواسطة walcom في 8 مارس 2006 في 10:11

فكر بطريقة أخرى

#7

السلام عليكم ورحمة الله

الاخ وليد , لقد إتجهت بالتفكير في الحلول الصعبة :D ...

لماذا لم تفكر بعمل Custom Control يحتوي علي Property لتحديد شكل المدخلات التي تريدها أنت , مع ملاحظة أنه يمكنك أيضاً أن تقوم بعمل ملف Configuration بحيث يمكن للمستخدم النهائي بإختيار شكل الأرقام التي يريدها ؟ بدلاً من اللجوء لإستخدام ال Regualr expression والتي تعتبر مفيدة جداً ولكن علي مستوي الـ Standard Format مثل الـ Email وغيرها

فيما يلي مثال بسيط لعمل Custom Control يقوم بالتحكم في شكل المدخلات في كائن ال Text Box

أولاً قم بإنشاء مشروع جديد من نوع Windows Control Library باسم TestMaskedTextBox

يقوم المشروع تلقائياً بإنشاء User Contol1 انت لا تحتاج اليها , قم بمسحها

قم بإضافة Component من قائمة Project باسم MaskedTextBox كمثال ثم أفتح الشفرة وقم باستبدالها بالشفرة التالية

Namespace TestMaskTextBox
    Public Class MaskedTextBox
        Inherits TextBox
        Private _Mask As String
        Public Property Mask() As String
            Get
                Return _Mask
            End Get
            Set(ByVal Value As String)
                _Mask = Value
            End Set
        End Property

#Region " Component Designer generated code "

        Public Sub New()
            MyBase.New()

            ' This call is required by the Component Designer.
            InitializeComponent()

            'Add any initialization after the InitializeComponent() call

        End Sub

        'Control overrides dispose to clean up the component list.
        Protected Overloads Overrides Sub Dispose(ByVal disposing As Boolean)
            If disposing Then
                If Not (components Is Nothing) Then
                    components.Dispose()
                End If
            End If
            MyBase.Dispose(disposing)
        End Sub

        'Required by the Control Designer
        Private components As System.ComponentModel.IContainer

        ' NOTE: The following procedure is required by the Component Designer
        ' It can be modified using the Component Designer.  Do not modify it
        ' using the code editor.
        <System.Diagnostics.DebuggerStepThrough()> Private Sub InitializeComponent()
            components = New System.ComponentModel.Container
        End Sub

#End Region

        Protected Overrides Sub OnPaint(ByVal pe As System.Windows.Forms.PaintEventArgs)
            MyBase.OnPaint(pe)
            'Add your custom paint code here
        End Sub

        Private Sub MaskedTextBox_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles MyBase.KeyPress
            If Trim(Mask) = String.Empty Then Exit Sub
            Dim myStr As String = Me.Text
            If myStr.Length > 0 Then
                If e.KeyChar = "" Then
                    myStr.Remove(Me.TextLength - 1, 1)
                    Exit Sub
                End If
            End If

            e.Handled = True
            Dim i As Int16
            Dim NewText As String = Me.Text
            For i = Me.SelectionStart To _Mask.Length - 1
                Select Case _Mask.Chars(i)
                    Case "#"
                        If Char.IsDigit(e.KeyChar) = True Then
                            NewText += e.KeyChar.ToString
                            Exit For
                        Else
                            Exit Sub
                        End If
                    Case "."
                        If Char.IsLetter(e.KeyChar) = True Then
                            NewText += e.KeyChar.ToString
                            Exit For
                        Else
                            Exit Sub
                        End If
                    Case Else
                        'Insert Mask Character
                        NewText = NewText & _Mask.Chars(i)
                End Select
            Next
            'Update The Text
            Me.Text = NewText
            Me.SelectionStart = Me.Text.Length
        End Sub
    End Class
End Namespace

ثم قم بعمل Build للمشروع وهكذا ببساطة يمكنك التحكم في شكل المدخلات من خلال الخاصية Mask والتي فيها الرمز # يمثل الرقم أي إذا كنت تريد شكل المدخل كالتالي مثلاً رقم تلفون في الخرطوم

(+83) 604357

يجب أن تكون قيمة الخاصية Mask والتي ستجدها آخر خاصية بعد إضافة الكنترول كالتالي

(+##) ######

ملحوظة صغيرة : لإضافة الكنترول الي صندوق الأدوات قم بضغط زر الماوس الايمن علي صندوق الادوات ثم إختار Add/Remove Items ثم قم بالضغط علي Browse ومن ثم قم بالذهاب الي مجلد Bin الخاص بمشروع TestMaskedTextBox ستجد هنالك ملف ال Dll قم بإضافته ويعد ذلك يمكنك التعامل معه مثل بقية الأدوات .

أما بالنسبة للنقطة التي وضحتها بعمل Configuration أعني هنا أنه يمكنك وضع قيمة الخاصية Mask من قاعدة بيانات بحيث يمكن للمستخدم النهائي التحكم فيها كما يشاء

مرفق المثال الخاص بعمل الكنترول

والله الموفق

TestMaskTextBox.rar

تم تعديل هذه المشاركة بواسطة Ammar Gaffar في 8 مارس 2006 في 16:53

#8

الحصل معاك شنو ياوليد , الطريقة إشتغلت معاك ؟؟

#9
aswany كتب:
يمكنكم التحكم بطريقة اخرى وهي إجبار المستخدم على كتابة أرقام فقط في هذه الخانات

' إدخال أرقام فقط

    Public Function PressOnlyNumeric(ByVal intKeyValue As System.Windows.Forms.KeyPressEventArgs) ' Integer
        Dim chKiy As Char
        chKiy = intKeyValue.KeyChar
        If Not (Char.IsDigit(chKiy) Or chKiy = "." Or Char.IsControl(chKiy)) Then
            MsgBox("غير مسموح بإدخال الحرف .. فضلاً إدخل أرقام فقط", MsgBoxStyle.MsgBoxRight + MsgBoxStyle.Critical, "إدخال خاطئ")
            intKeyValue.Handled = True ' إلغاء الحرف المضغوط
        End If

    End Function

ممكن توضح لي كيف يمكن الاستفادة من هذا الاجراء ..

1 - سقوط الإنسان ليس فشلاً ، ولكن الفشل أن يبقى حيث سقط .

2 - الفاشلون قسمان : قسم فكر ولم يفعل ، وقسم فعل ولم يفكر .

-------------------------------------------------------

درس في ADO.NET 2005, التعامل مع الجداول المترابطة في ado.net 2005

درس في الإجراءات الفرعية ( العامة )

درس في ADO.NET من الصفر إلى الإحتراف .

#10

اخي ياسر

اسف على التاخير

للإستفادة من هذا الاجراء قم بوضعه داخل اي Module

وفي حدث KeyPress لأي textbox سيكون الكود كالتالي

 Private Sub NumberOnly_KeyPress(ByVal sender As System.Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles txtPrice.KeyPress, txtQty.KeyPress
		PressOnlyNumeric(e)   ' إدخال أرقام فقط
	End Sub
#11

اخي ياسر

اسف على التاخير

للإستفادة من هذا الاجراء قم بوضعه داخل اي Module

وفي حدث KeyPress لأي textbox سيكون الكود كالتالي

 Private Sub NumberOnly_KeyPress(ByVal sender As System.Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles txtPrice.KeyPress, txtQty.KeyPress
		PressOnlyNumeric(e)   ' إدخال أرقام فقط
	End Sub
#12

الف شكر يا أخي aswany

1 - سقوط الإنسان ليس فشلاً ، ولكن الفشل أن يبقى حيث سقط .

2 - الفاشلون قسمان : قسم فكر ولم يفعل ، وقسم فعل ولم يفكر .

-------------------------------------------------------

درس في ADO.NET 2005, التعامل مع الجداول المترابطة في ado.net 2005

درس في الإجراءات الفرعية ( العامة )

درس في ADO.NET من الصفر إلى الإحتراف .

هذا الموضوع مغلق.

مواضيع مشابهة