مشكلة التحقق من الصحة ASP: أسماء ملفات التحميل مع regularexpressionvalidator

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

سؤال

لدي في ملف الإعدادات صف من جميع أنواع الملفات التي أرغب في السماح بها:

jpeg|jpg|tiff|tif|png|gif|bmp|eps|wmf|emf|pdf|doc|docx|zip|rar|ppt|pptx|mdb|xls

أريد أن يكون بجوار عنصر التحكم في Fileupload وهو RegularexpressionValatorator يسمح لهذه الملفات فقط.

أقوم بمعالجة ذلك في حدث PAGELAAD إعداد خاصية ValidationExpression من Validator Regex.

حاولت:

protected void Page_Load(object sender, EventArgs e)
{
    if (!IsPostBack)
    {
        string regex = "jpeg|jpg|tiff"; //A huge list of filetypes.
        upFiles_RegularExpressionValidator.ValidationExpression = 
            @"^.*\.(" + regex +")$";
    }
}

لكنها حساسة لحالة الأحرف. مشكلتي الوحيدة الآن هي أن تجعلها غير حساسة.

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

المحلول

protected void Page_Load(object sender, EventArgs e)
{
    if (!IsPostBack)
    {
        string regex = "([jJ][pP][eE][gG])|([jJ][pP][gG])|([tT][iI][fF][fF])"; //A huge list of filetypes.
        upFiles_RegularExpressionValidator.ValidationExpression = 
            @"^.*\.(" + regex +")$";
    }
}

نصائح أخرى

إذا قمت بإيقاف تشغيل Validion Side Condention وعلى استخدام التحقق من جانب الخادم فقط، فهناك Operativte Operativte Operatior (؟ I) التي يمكن استخدامها. إذا كنت تريد Someathign يعمل من جانب العميل والخادم، فقد تحتاج إلى اللجوء إلى شيء مثل

JJ] [PP] [EE] [GG

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

إجابه:

^.*\.(?i-s:pdf|exe)$

مما يعني:

ValidationExpression = @"^.*\.(?i-s:pdf|exe)$"; //will match pdf PDF exe EXE

string regex = "jpeg|jpg|tiff|tif|png|gif|bmp|eps";
ValidationExpression = @"^.*\.(?i-s:file_types)$".Replace("file_types", regex);

يجب أن يكون هذا وسيلة فعالة للغاية للتحقق من التحقق من الملفات مقابل قائمة قابلة للتغيير ديناميكية

لمعلوماتك، لقد صنعتها هذه regex builder online، أداة مجانية مذهلة!

يعمل Regex بشكل جيد مع RegularexpressionValatorator على جانب الخادم. ترتفع المشكلة عندما تحاول إجراء التحقق من صحة العميل، والذي فشل لأن نكهة JavaScript Regex لا تعرف كيفية التعامل مع "؟ I" (تحقق عدم الحساسية في JavaScript Regex مع "I"). يمكنك حل هذه المشكلة عن طريق إضافة هذا البرنامج النصي إلى صفحاتك. أعتقد أن البرنامج النصي مستقيم إلى الأمام.

   <script type="text/javascript" language="javascript"> 
        function RegularExpressionValidatorEvaluateIsValid(val) 
        { 
          var value = ValidatorGetValue(val.controltovalidate); 
          if (ValidatorTrim(value).length == 0) 
            return true; 

          var regex = null; 
          if(val.validationexpression.indexOf("(?i)")>=0) 
          { 
             regex = new RegExp(val.validationexpression.replace("(?i)",""),"i"); 
          } 
          else 
          { 
             regex = new RegExp(val.validationexpression); 
          } 

          var matches = regex.exec(value);

          return (matches != null && value == matches[0]); 
        } 
   </script>

إذا كنت تقوم بتنفيذ خادم التحقق من الصحة هذا مع .NET، فيمكنك استخدام شيء مثل

VB:

    Dim re As New Regex("(jpg)|(gif)", RegexOptions.IgnoreCase)
    re.IsMatch("image.jpg")

C #:

    var re = new Regex("(jpg)|(gif)", RegexOptions.IgnoreCase);
    re.IsMatch("image.jpg")
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top