سؤال

أحاول إزالة كل ما ليس أبجديًا رقميًا ، أو مساحة تحتوي على _:

$filename = preg_replace("([^a-zA-Z0-9]|^\s)", "_", $filename);

ماذا أفعل خطأ هنا ، لا يبدو أنه يعمل. لقد جربت العديد من مجموعات Regex ... (وأنا عمومًا لست مشرقًا جدًا).

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

المحلول

جرب هذا:

$filename = preg_replace("/[^a-zA-Z0-9 ]/", "_", $filename);

نصائح أخرى

$filename = preg_replace('~[\W\s]~', '_', $filename);

إذا فهمت سؤالك بشكل صحيح ، فأنت تريد استبدال أي مساحة ( s) أو حرف غير الألفاني ( w) مع "_". هذا يجب أن يكون على ما يرام. لاحظ أن w هي حقيبة كبيرة ، على عكس الأحرف الصغيرة w التي ستتطابق مع الأحرف الأبجدية.

الحل الذي يناسبني هو:

$filename = preg_replace('/\W+/', '_', $filename);

ال + تطابق كتل من حدث واحد أو أكثر \W مساحة بيضاء تشمل المساحات وجميع الشخصيات غير الرقمية الرقمية

محاولة

$filename = preg_replace("/[a-zA-Z0-9]|\s/", "_", $filename);
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top