تقييد الإجابات النصية باستخدام التعبيرات النمطية

Read in English | Lire en français | Leer en español آخر تحديث: 29 يوليو 2025

التعبير النمطي، أو regex، هو نمط بحث يُستخدم لمطابقة أحرف ونطاقات محددة من الأحرف ضمن سلسلة نصية. يُستخدم على نطاق واسع للتحقق من صحة النصوص والبحث والاستخراج والتقييد في معظم لغات البرمجة. يدعم KoboToolbox التعبيرات النمطية للتحكم في الطول والأحرف أثناء إدخال البيانات لسؤال معين (مثل التحكم في إدخال رقم الهاتف المحمول ليكون بالضبط 10 أرقام، أو التحكم في إدخال بريد إلكتروني صالح، إلخ).

لاستخدام التعبير النمطي في KoboToolbox، اتبع الخطوات التالية

  1. قم بإعداد سؤال من نوع نص.

  2. انتقل إلى الإعدادات الخاصة بالسؤال.

  3. انتقل إلى معايير التحقق واختر خيار إدخال منطق التحقق يدويًا بكود XLSForm.

  4. في مربع كود التحقق، أدخل صيغة التعبير النمطي بين علامتي الاقتباس (' ') بتنسيق regex(., ' '). للإشارة، النقطة (.) تشير إلى 'هذا السؤال'، بينما يجب أن يتوافق التعبير النمطي داخل علامتي الاقتباس (' ') مع قواعد التعبيرات النمطية المعتمدة.

  5. (اختياري) أضف رسالة خطأ مخصصة ليراها الشخص الذي يُدخل البيانات عندما لا يستوفي معايير التعبير النمطي.

image

يمكن أيضًا كتابة التعبير النمطي في XLSForm، تحت عمود constraint:

ورقة survey

type

name

label

appearance

constraint

constraint_message

text

q1

رقم هاتف المستجيب

numbers

regex(., '^[0-9]{10}$')

يجب أن تكون هذه القيمة 10 أرقام فقط

survey

بدلاً من ذلك، يمكنك إنشاء سؤال من نوع calculate ثم تحديد كود التعبير النمطي تحت عمود calculation. يمكنك بعد ذلك استخدام هذا المتغير عدة مرات حسب الحاجة في الاستبيان:

ورقة survey

type

name

label

calculation

constraint

constraint_message

calculate

q0

'^[A-Z]{1}[a-z]{1,}\s[A-Z]{1}[a-z]{1,}$'

text

q1

اسم جامع البيانات

regex(., ${q0})

يرجى استخدام هذا التنسيق: Kobe Bryant

text

q2

اسم المستجيب

regex(., ${q0})

يرجى استخدام هذا التنسيق: Kobe Bryant

integer

q3

عمر المستجيب

survey

كيف أبني التعبير النمطي الذي أحتاجه؟

بالإضافة إلى الأمثلة والنصائح المقدمة أدناه، يرجى زيارة هذا الموقع للحصول على مزيد من المساعدة والأمثلة.

يجب دائمًا كتابة التعبيرات النمطية في KoboToolbox بين الفواصل العليا regex(., ' ') كما هو موضح في الأمثلة.

التعبير النمطي

الوصف

^

يطابق رمز الإقحام بداية السلسلة النصية دون استهلاك أي حرف.

$

يطابق رمز الدولار نهاية السلسلة النصية دون استهلاك أي حرف.

[abc]

يطابق إما a أو b أو c من داخل الأقواس المربعة [ ].

[a-z]

يطابق أي حرف صغير من a إلى z.

[A-Z]

يطابق أي حرف كبير من A إلى Z.

[0-9]

يطابق أي أرقام صحيحة من 0 إلى 9.

[a-zA-Z0-9]

يطابق أي حرف من a إلى z أو A إلى Z أو 0 إلى 9.

[^abc]

يطابق أي حرف باستثناء a أو b أو c.

[^A-Z]

يطابق أي أحرف باستثناء تلك الموجودة في النطاق من A إلى Z.

(apple)

يطابق حرف التجميع ( ) أي شيء موجود داخل الأقواس.

|

يطابق الشريط العمودي أي عنصر منفصل.

\

يُستخدم الشرطة المائلة العكسية لمطابقة القيمة الحرفية لأي حرف وصفي (مثل حاول استخدام \. أو \@ أو \$ عند بناء التعبير النمطي).

\number

يطابق نفس الحرف الذي تمت مطابقته مؤخرًا بواسطة المجموعة الملتقطة رقم n (الرقم المستخدم).

\s

يطابق أي مسافة أو علامة تبويب.

\b

يطابق، دون استهلاك أي أحرف، مباشرة بين حرف مطابق بواسطة \w وحرف غير مطابق بواسطة \w (بأي ترتيب). يُعرف \b أيضًا باسم حد الكلمة.

\d

يطابق أي أرقام مكافئة [0-9]

\D

يطابق أي شيء بخلاف الأرقام (0 إلى 9).

\w

يطابق أي حرف كلمة (أي a إلى z أو A إلى Z أو 0 إلى 9 أو _).

\W

يطابق أي شيء بخلاف ما يطابقه \w (أي يطابق الأحرف الخاصة والمسافات).

?

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

*

يطابق رمز النجمة المستخدم خلف حرف صفرًا أو أكثر من الأحرف المتتالية.

+

يطابق رمز الجمع المستخدم خلف حرف واحدًا أو أكثر من الأحرف المتتالية.

{x}

يطابق بالضبط x أحرف متتالية.

{x,}

يطابق على الأقل x أحرف متتالية (أو أكثر).

{x,y}

يطابق بين x و y أحرف متتالية.

الأحرف ذات العلامات الإضافية

التعبير النمطي

الوصف

[A-zÀ-ú]

يقبل الأحرف الصغيرة والكبيرة ذات العلامات الإضافية

[A-zÀ-ÿ]

يقبل الأحرف الصغيرة والكبيرة ذات العلامات الإضافية بما في ذلك الأحرف ذات علامة التنوين (يتضمن [ ] ^ \ × ÷)

[A-Za-zÀ-ÿ]

يقبل الأحرف الصغيرة والكبيرة ذات العلامات الإضافية ولكن لا يتضمن [ ] ^ \

[A-Za-zÀ-ÖØ-öø-ÿ]

يقبل الأحرف الصغيرة والكبيرة ذات العلامات الإضافية ولكن لا يتضمن [ ] ^ \ × ÷

أمثلة متعلقة باستخدام الأرقام

لجميع الأسئلة من نوع text التي تستخدم أرقامًا، لا تنسَ كتابة numbers تحت عمود appearance.

التعبير النمطي

الوصف

regex(., '^[0-9]{10}$') أو regex(., '^\d{10}$')

تقييد رقم الهاتف المحمول إلى عشرة أرقام

regex(., '^[0-9]{4}.[0-9]{2}.[0-9]{2}$') أو regex(., '^\d{4}\.\d{2}\.\d{2}$')

تقييد الإدخال إلى 1234.56.78

regex(., '^[01-99]{2}$') and (. >= 01)

تقييد الإدخال بين 01 إلى 99 رقمًا حيث لا يُسمح بتنسيق إدخال رقم واحد (مثل 1 أو 2)

regex(., '^(12|345)$')

تقييد الإدخال إما إلى 12 أو 345

regex(., '^[1-9][0-9]{8}$') أو regex(., '^[^0][0-9]{8}$')

تقييد إدخال تسعة أرقام حيث لا يمكن أن يكون الرقم الأول 0

regex(., '^\d$')

تقييد الإدخال إلى رقم واحد بين 0 إلى 9

regex(., '^\d{5}$')

تقييد الإدخال إلى خمسة أرقام بين 0 إلى 9

regex(., '^\d{2}\.\d{3}$')

تقييد الإدخال إلى رقمين وثلاثة أرقام عشرية (مثل 12.345)

regex(., '^\d{2}(\.\d{3})?$')

تقييد الإدخال إلى رقمين وثلاثة أرقام عشرية (بينما الأرقام العشرية اختيارية) (مثل 12 أو 12.345)

regex(., '^[0-9]{10}$') or regex(., '^[0-9]{13}$') أو regex(., '^[0-9]{17}$') أو regex(., '^([0-9]{10}|[0-9]{13}|[0-9]{17})$') أو regex(., '^([\d]{10}|[\d]{13}|[\d]{17})$')

تقييد الإدخال إلى أرقام من 10 أو 13 أو 17 رقمًا فقط

أمثلة متعلقة باستخدام الأحرف

التعبير النمطي

الوصف

regex(., '^[a-z]{1,6}$')

تقييد الإدخال إلى أي أحرف صغيرة (بطول يصل إلى 6 أحرف)

regex(., '^[A-Z]{1,10}$')

تقييد الإدخال إلى أي أحرف كبيرة (بطول يصل إلى 10 أحرف)

regex(., '^(Apple|Orange|Banana)$')

تقييد الإدخال إلى Apple أو Orange أو Banana فقط

regex(., '^p(ea|ai)r$')

تقييد الإدخال إلى pear أو pair فقط

regex(., '^[A-Z]{1}[a-z]{1,}[ ]{1}[A-Z]{1}[a-z]{1,}$')

تقييد إدخال اسم المستفيد حيث تكون الأحرف الأولى من الاسم الأول والأخير كبيرة مثل Kobe Bryant

regex(., '^\w{1,}\s(\w{1,})?(\s)?\w{1,}$')

تقييد إدخال اسم المستفيد مع الاسم الأول والاسم الأوسط (إن وجد) والاسم الأخير مثل Kobe Bean Bryant

regex(., '^([A-Z]{1}[a-z]{1,}\s)([A-Z]{1}[a-z]{1,}\s?)+$') أو regex(., '^([A-Z]{1}[a-z]{1,}\s?)+$')

تقييد إدخال الاسم الكامل للمستفيد حيث تكون الأحرف الأولى من الأسماء كبيرة والأسماء طويلة جدًا (غالبًا أكثر من 3 كلمات) مثل Samayamantri Venkata Rama Naga Butchi Anjaneya Satya Krishna Vijay (هذا مثال على أسماء جنوب الهند)

regex(., '^(\D+)\s(\D+)\s?\1$')

تقييد إدخال الاسم الأول للمستفيد (حتى تتمكن من التقاط الإملاء الصحيح) حيث يُجبر جامعو البيانات على إدخال الاسم الأول للمستفيد مرتين مثل Kobe Bryant Kobe. (قد يكون هذا مفيدًا عندما تحاول توثيق تفاصيل المستفيدين حيث قد يكلفك خطأ إملائي كثيرًا)

regex(., '^(\D+)\s(\D+)\s?\2$')

تقييد إدخال الاسم الأخير للمستفيد (حتى تتمكن من التقاط الإملاء الصحيح) حيث يُجبر جامعو البيانات على إدخال الاسم الأخير للمستفيد مرتين مثل Kobe Bryant Bryant. (قد يكون هذا مفيدًا عندما تحاول توثيق تفاصيل المستفيدين حيث قد يكلفك خطأ إملائي كثيرًا)

regex(., '^colou?r$')

تقييد حرف داخل كلمة باستخدام ? (محدد الكمية) مثل السماح بـ color أو colour كإدخال

regex(., '^ah*!$')

تقييد حرف داخل كلمة باستخدام * (محدد الكمية) مثل السماح بـ a! أو ah! أو ahh! أو ahhh! وهكذا كإدخال

regex(., '^ah+!$')

تقييد حرف داخل كلمة باستخدام + (محدد الكمية) مثل السماح بـ ah! أو ahh! أو ahhh! وهكذا كإدخال

regex(., '^\D$')

تقييد الإدخال إلى حرف غير رقمي (مثل a أو c أو ! أو # أو % إلخ.)

regex(., '^\D{5 }$')

تقييد الإدخال إلى خمسة أحرف غير رقمية (مثل aZcB!#% إلخ.)

regex(., '^[A-Z\s]+$')

تقييد جميع إدخالات النص إلى أحرف كبيرة، باستثناء الأحرف الخاصة (! @ # $ % ^ & * ( ) . , ? / " ' إلخ.)

regex(., '^[A-Z\W]+$')

تقييد جميع إدخالات النص إلى أحرف كبيرة، بما في ذلك الأحرف الخاصة (! @ # $ % ^ & * ( ) . , ? / " ' إلخ.)

regex(., '^[a-z\s]+$')

تقييد جميع إدخالات النص إلى أحرف صغيرة، باستثناء الأحرف الخاصة (! @ # $ % ^ & * ( ) . , ? / " ' إلخ.)

regex(., '^[a-z\W]+$')

تقييد جميع إدخالات النص إلى أحرف صغيرة، بما في ذلك الأحرف الخاصة (! @ # $ % ^ & * ( ) . , ? / " ' إلخ.)

أمثلة متعلقة باستخدام مزيج من الأحرف والأرقام

التعبير النمطي في XLSForm

الوصف

regex(., '^\w$')

تقييد حرف واحد يطابق بين a إلى z أو A إلى Z أو 0 إلى 9 أو _ (أي مطابقة حرف واحد من [a-zA-Z0-9_])

regex(., '^\w{3}$')

تقييد ثلاثة أحرف تطابق بين a إلى z أو A إلى Z أو 0 إلى 9 أو _ (أي مطابقة حرف واحد من [a-zA-Z0-9_])

regex(., '^[A-Z]{3}[_][A-Z]{3}[_][0-9]{4}[_][0-9]{4}$')

تقييد معرف المستفيد إلى تنسيق محدد مثل CAR_PRC_2020_0048

regex(., '^CAR-PRC-2020-[0-9]{4}$')

تقييد معرف المستفيد إلى تنسيق محدد مثل CAR-PRC-2020-0048 (حيث يجب على جامعي البيانات إدخال مطابقة تامة من CAR إلى - أي CAR-PRC-2020- ويمكنهم إدخال أي رقم تسلسلي مكون من 4 أرقام)

regex(., '^[$|\£]\d{3}$')

تقييد إدخال عملة من ثلاثة أرقام مع علامة عملة (إما دولار أو جنيه) في المقدمة (مثل $999 أو £500)

regex(., '^\W*(\w+\b\W*){3}$')

تقييد إدخال دقيق لعدد الكلمات (مثل تقييد بالضبط 3 كلمات I love you.)

regex(., '^\W*(\w+\b\W*){3,5}$')

تقييد إدخال عدد الكلمات (مثل تقييد نطاق من الكلمات من 3 إلى 5)

أمثلة متعلقة بتقييد إدخالات البريد الإلكتروني الصالحة

هذه الأمثلة توضيحية بحتة ويجب تعديلها حسب حالة الاستخدام الخاصة بك. استخدام التعبيرات النمطية لتقييد عناوين البريد الإلكتروني لا يضمن أنها صالحة، بل فقط أنها تتبع نمطًا متوقعًا.

التعبير النمطي

الوصف

regex(., '^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*(\.[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*)*\.[a-zA-Z]{2,}$')

تقييد الإدخال إلى عنوان بريد إلكتروني صالح (مثل example.domain.com أو example.domain.com.np).

أمثلة متعلقة باستخدام إدخالات الوقت

التعبير النمطي

الوصف

regex(., '^([00-23]{0,2}:[00-59]{0,2}:[00-59]{0,2})$')

تقييد إدخال الوقت بتنسيق 24 ساعة

regex(., '^([00-12]{0,2}:[00-59]{0,2}:[00-59]{0,2})$')

تقييد إدخال الوقت بتنسيق 12 ساعة

اعتبارات عند استخدام التعبيرات النمطية

  • إذا كنت ترغب في استخدام قيد تعبير نمطي على رقم في سؤال من نوع text، تأكد من أن لديك دائمًا القيمة numbers تحت عمود appearance. هذا يقيد عرض الأحرف الأبجدية، مما يجعل الأرقام فقط مرئية للإدخالات.

  • يتصرف تطبيق Collect Android وEnketo بشكل مختلف في التعامل مع التعبيرات النمطية. يتصرف Collect كما لو كنت قد استخدمت المراسي ^ و $ حول التعبير (حتى لو لم تستخدمها)، بينما يتطلب Enketo المراسي كإلزامية للمطابقة الدقيقة.