ما هو التعبير العادي (JavaScript) الذي يجب أن أستخدمه للتأكد من أن السلسلة هي اسم ملف صالح؟

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

  •  02-07-2019
  •  | 
  •  

سؤال

ما زلت أتعلم RegEx في الوقت الحالي، ولكن في الوقت الحالي، هل يمكن لأي شخص مساعدتي في هذا؟لدي بعض المتطلبات الخاصة لتنسيق السلسلة:

  1. لا الدلائل.فقط اسم الملف.
  2. يجب أن يكون اسم الملف بأحرف صغيرة.
  3. يجب استبدال المسافات البيضاء بشرطات سفلية.

لا ينبغي أن يكون الأمر صعبًا، لكنني مضغوط من الوقت ولست متأكدًا من الطريقة "الصحيحة" لضمان اسم ملف صالح (أي أنني نسيت الأحرف التي كان من المفترض أن تكون غير صالحة لأسماء الملفات).

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

المحلول

والجمع البسيط بين RegExp وجافا سكريبت الأخرى هو ما أوصي به:

var a = "c:\\some\\path\\to\\a\\file\\with Whitespace.TXT";
a = a.replace(/^.*[\\\/]([^\\\/]*)$/i,"$1");
a = a.replace(/\s/g,"_");
a = a.toLowerCase();
alert(a);

نصائح أخرى

إذا كنت في عجلة من أمرك، فيمكنك عادةً العثور على تعبيرات عادية مقبولة في المكتبة على http://regexlib.com/.تحرير ليقول: إليك واحدة قد تناسبك.

إذا كنت تأخذ مسار سلسلة من المستخدم (على سبيل المثال.من خلال قراءة القيمة . لحقل تحميل الملف)، لا يمكنك في الواقع التأكد من الحرف الفاصل للمسار.قد تكون شرطة مائلة عكسية (Windows)، شرطة مائلة للأمام (Linux، OS X، BSD وما إلى ذلك) أو أي شيء آخر تمامًا على أنظمة تشغيل قديمة أو غامضة.سيؤدي تقسيم المسار إما على شرطة مائلة للأمام أو للخلف إلى تغطية الحالات الشائعة، ولكن من الجيد تضمين قدرة المستخدم على تجاوز اسم الملف في حالة حدوث خطأ في التخمين.

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

إليك ما أستخدمه:

var parts= path.split('\\');
parts= parts[parts.length-1].split('/');
var filename= parts[parts.length-1].toLowerCase();
filename= filename.replace(new RegExp('[^a-z0-9]+', 'g'), '_');
if (filename=='') filename= '_'

أود أن تحقق من مكتبة RegEx.

يمكنك الاختيار من بين أي عدد من التعبيرات العادية التي تم تكوينها مسبقًا بدرجات متفاوتة من القوة لتناسب احتياجاتك.

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