سؤال

أحد متطلبات مشروع ASP.Net 2.0 الذي أعمل عليه يحد من حقل معين بحد أقصى 10 كلمات (وليس أحرف).أستخدم حاليًا عنصر تحكم CustomValidator باستخدام طريقة ServerValidate التالية:

Protected Sub TenWordsTextBoxValidator_ServerValidate(ByVal source As Object, ByVal args As System.Web.UI.WebControls.ServerValidateEventArgs) Handles TenWordsTextBoxValidator.ServerValidate
    '' 10 words
    args.IsValid = args.Value.Split(" ").Length <= 10
End Sub

هل لدى أي شخص طريقة أكثر شمولاً/دقة للحصول على عدد الكلمات؟

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

المحلول 2

يبدو أن هذا التعبير العادي يعمل بشكل رائع:

"^(\b\S+\b\s*){0,10}$"

تحديث:ما ورد أعلاه به بعض العيوب لذلك انتهى بي الأمر باستخدام RegEx:

[\s\x21-\x2F\x3A-\x40\x5B-\x60\x7B-\xBF]+

أنا split() السلسلة الموجودة في ذلك التعبير العادي واستخدم ملف length من المصفوفة الناتجة للحصول على عدد الكلمات الصحيح.

نصائح أخرى

يمكنك استخدام أحد أدوات التحقق المضمنة مع التعبير العادي الذي يقوم بإحصاء الكلمات.

أنا صدئ قليلاً مع التعبير العادي لذا تعامل معي بسهولة:

(\b.*\b){0,10}

لقد قمت بالتصويت لصالح إجابة مهرين، وعلقت عليها أيضًا، ولكن نظرًا لأن التعليقات مخفية افتراضيًا، دعني أشرحها مرة أخرى:

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

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