تعبير منتظم لقبول الأحرف الأبجدية الرقمية (6-10 chars) .net ، ج#
-
25-09-2019 - |
سؤال
أقوم بإنشاء نموذج تسجيل مستخدم باستخدام C# مع .NET. لدي شرط للتحقق من صحة حقول كلمة المرور التي تم إدخالها. متطلبات التحقق من الصحة كما هو موضح أدناه.
- يجب أن يكون أبجديًا رقميًا (AZ ، AZ ، 0-9)
- يجب أن تقبل 6-10 أحرف (الحد الأدنى 6 أحرف ، 10 أحرف 10)
- مع واحد على الأقل من الأبجدية والرقم (مثال:
stack1over
)
أنا أستخدم تعبيرًا منتظمًا على النحو التالي.
^([a-zA-Z0-9]{6,10})$
يرضي أول شروط 2. يفشل عندما أدخل الأحرف أو الأرقام فقط.
المحلول
مررها عبر regexes متعددة إذا استطعت. سيكون أكثر نظافة من تلك الوحوش المظهر :-)
^[a-zA-Z0-9]{6,10}$
[a-zA-Z]
[0-9]
على الرغم من أن البعض قد يعتبره ذكيًا ، فليس من الضروري القيام به كل شىء مع regex واحدة (أو حتى مع أي regex ، في بعض الأحيان - فقط شاهد الأشخاص الذين يرغبون في اكتشاف الأرقام بين 75 و 4093).
هل تفضل رؤية بعض التعليمات البرمجية النظيفة اللطيفة مثل:
if not checkRegex(str,"^[0-9]+$")
return false
val = string_to_int(str);
return (val >= 75) and (val <= 4093)
أو شيء من هذا القبيل:
return checkRegex(str,"^7[5-9]$|^[89][0-9]$|^[1-9][0-9][0-9]$|^[1-3][0-9][0-9][0-9]$|^40[0-8][0-9]$|^409[0-3]$")
أنا أعرف أي واحد هوية شخصية تفضل الحفاظ على :-)
نصائح أخرى
استخدام إيجابية انظر للأمام
^(?=.*[a-zA-Z])(?=.*[0-9])[a-zA-Z0-9]{6,10}$
وتسمى البحث عن حولك أيضًا تأكيدات ذات عرض صفر. إنها عرض صفر تمامًا مثل بداية ونهاية الخط (
^
,$
). الفرق هو أن LookArounds سوف تتطابق فعليًا إلى الشخصيات ، ولكن بعد ذلك التخلي عن المباراة وإرجاع النتيجة فقط: تطابق أو بدون تطابق. لهذا السبب يطلق عليهم "التأكيدات". إنهم لا يستهلكون أحرفًا في السلسلة ، لكنهم يؤكدون فقط ما إذا كانت المباراة ممكنة أم لا.
بناء الجملة للنظر حوله:
(?=REGEX)
lookahead إيجابية(?!REGEX)
lookahead السلبية(?<=REGEX)
نظرة إيجابية(?<!REGEX)
نظرة سلبية
string r = @"^(?=.*[A-Za-z])(?=.*[0-9])[A-Za-z0-9]{6,10}$";
Regex x = new Regex(r);
var z = x.IsMatch(password);