كيف يمكنني التحقق مما إذا كان التعبير العادي C# يحاول مطابقة السلاسل 1- (و 1)-أحداث؟

StackOverflow https://stackoverflow.com/questions/3870344

  •  28-09-2019
  •  | 
  •  

سؤال

ربما هذا سؤال نادر جدًا (أو حتى غبي) ، لكنني أحتاجه في تطبيقي.

كيف يمكنني التحقق مما إذا كان التعبير العادي C# يحاول مطابقة سلاسل 1-character؟

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

هل أوضحت نفسي؟

شكرًا.

نفذ

ملاحظة: رأيت إجابة حول حساب طول السلاسل المتطابقة النهائية ، ولكن لسبب غير معروف ، انتهت الإجابة. اعتقدت ذلك لفترة من الوقت ، أعتقد أن حساب السلاسل المتطابقة النهائية على ما يرام ، على الرغم من أنه سيكون نوعًا من البطيء. ومع ذلك ، فإن السؤال الأصلي نادر جدا ومملة.

هل كانت مفيدة؟

المحلول

بدلاً من التحقق من التحقق من التعبير العادي ، والذي قد يكون معقدًا ، يمكنك تطبيقه فقط على أحرف واحدة بدلاً من السلسلة بأكملها.

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

على سبيل المثال:

  • ABC اعواد الكبريت [ABC]
  • ^ABC اعواد الكبريت [^ABC]
  • A-Z اعواد الكبريت [A-Z]
  • # اعواد الكبريت [0-9]
  • \w اعواد الكبريت \w
  • AB#x-z اعواد الكبريت [AB]|[0-9]|[x-z]|\w
  • ما هي الحالات التي تحتاج إلى دعمها؟

سيكون هذا سهلاً إلى حد ما لتحليله والتحقق منه.

نصائح أخرى

سيكون regexp .{1} هذا سوف يسمح لأي char رغم ذلك. إذا كنت تريد فقط الألبانوسيوم ، فيمكنك استخدام [a-z0-9]{1} أو الاختزال /w{1}

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

هناك خيار آخر يتمثل في حفظ حقل إدخال النماذج إلى char وليس سلسلة على الرغم من أنك قد تحتاج إلى بعض التعامل حول هذا لمنع الأخطاء.

لماذا لا تستخدم MaxLength وحفظ إلى Char.

يمكنك البحث عن تكييف *, +, {}, ? وما إلى ذلك وحساب عدد الشخصيات (لا تنس تسطيح [] كحرف واحد).

في الأساس عليك تحليل regex الخاص بك.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top