سؤال

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

^(([a-zA-Z]:)|(\\{2}\w+)\$?)(\\(\w[\w].*))(.pdf)$

هذا يعمل في إنترنت إكسبلورر, جوجل كروم, ولكن لا يعمل في فايرفوكس.اختبار تفشل دائما ، حتى بالنسبة الفعلي PDF.لذلك قررت أن الأشياء الزائدة لا محل لها مبسطة إلى:

^.+\.pdf$

و الآن يعمل بشكل جيد في فايرفوكس, فضلا عن الاستمرار في العمل في أي من الكروم.
هذا هوس محددة asp:FileUpload و RegularExpressionValidator الضوابط في ASP.NET أم هو ببساطة بسبب مختلف المتصفحات الداعمة regex بطرق مختلفة ؟ وفي كلتا الحالتين, ما هي بعض من هذا الأخير أن كنت قد واجهت ؟

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

المحلول

وبقدر ما أعرف فايرفوكس لا يسمح لديك المسار الكامل للتحميل. تفسير التعابير العادية يبدو غير ذي صلة في هذه الحالة. أنا لم أرى أي فرق بين المتصفحات الحديثة في تنفيذ التعبير العادية.

نصائح أخرى

وردا عن سؤال الفعلي: والتعابير المنطقية الأصلي يتطلب قيمة للبدء مع حرف محرك أقراص أو اسم الجهاز UNC. فمن الممكن جدا أن فايرفوكس ببساطة لا يشمل ذلك مع اسم الملف. لاحظ أيضا أنه إذا كان لديك أي نية لكونه عبر منصة، ستفشل التي التعابير المنطقية على أي نظام غير Windows، بغض النظر عن المتصفح، كما أنها لا تستخدم أحرف محركات الأقراص أو مسارات UNC. الخاص بك باستخدام التعابير المنطقية المبسطة ( "قبول أي شيء، طالما أنها تنتهي مع قوات الدفاع الشعبي") هو من أفضل من الاختيار اسم الملف كما كنت ذاهب الى الحصول عليها.

ولكن ، تعليق جوناثان على السؤال الأصلي لا يمكن أن يكون مبالغا فيه. أبدا، أبدا، <م> من أي وقت مضى يثقون في اسم الملف وسيلة كافية للوقوف على محتوياته. أو نوع MIME، لهذه المسألة. برنامج العميل يتحدث إلى خادم الويب الخاص بك (التي قد لا حتى يكون المتصفح) يمكن أن أكذب عليك أي شيء، وسوف لا تعرف أبدا إلا إذا تحقق ذلك. في هذه الحالة، وهذا يعني تغذية ملف ردت الى بعض التعليمات البرمجية التي يفهم شكل PDF وجود هذا الرمز اقول لكم ما اذا كان PDF صحيح أم لا. التحقق من اسم الملف قد يساعد على منع الناس من محاولة تقديم الملفات غير صحيحة واضح، ولكنها ليست اختبارا كاف من الملفات التي يتم تلقيها.

(وأنا أدرك أنك قد تعرف عن ضرورة التحقق من صحة إضافية، ولكن الشخص التالي الذي لديه حالة مماثلة، ويجد لا يجوز سؤالك.)

إذا كنت تستخدم جافا سكريبت, لا تضم regex مع مائلة أسباب الخطأ في فايرفوكس.

حاول القيام var regex = /^(([a-zA-Z]:)|(\\{2}\w+)\$?)(\\(\w[\w].*))(.pdf)$/;

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

ولقد لاحظت فرق بين المتصفحات في ما يخص بناء الجملة نمط. ومع ذلك، لقد لاحظت الفرق بين C # وجافا سكريبت عن تنفيذ C # الصورة يسمح الظهر المراجع وتنفيذ الجافا سكريبت للا.

أعتقد جافا سكريبت REs هي محددة من قبل ECMA القياسية, و لا شك أن هناك العديد من الاختلافات بين شبيبة المترجمين.لم أجد أي في البرامج أو ينظر المذكورة في المادة.

الرسالة الخاصة بك هو في الواقع قليلا مربكة ، منذ كنت رمي ASP الاشياء هناك.أنا لا أرى كيف نستنتج هو متصفح خطأ عند الحديث عن التكنولوجيا من جانب الخادم أو التعليمات البرمجية التي تم إنشاؤها.في الواقع, نحن لا نعرف حتى إذا كنت تتحدث عن JS على المتصفح, التحقق من صحة مجال تحميل (لا يمكنك القيام بذلك على الأقل في طريقة بسيطة ، FF3) أو على جانب الملقم (لا FF ولا أوبرا أو سفاري تحميل المسار الكامل من الملف الذي تم تحميله.أنا مندهش أن تعلم أن كروم لا مثل IE...).

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