سؤال

وأريد أن تحقق ما إذا كانت سلسلة هو اسم الملف (اسم DOT تحويلة) أم لا.

لا يمكن أن يحتوي اسم الملف / ? * : ; { } \

وأرجو أن توحي لي التعبير رجإكس لاستخدامها في preg_match ()؟

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

المحلول

وهنا تذهب:

"[^/?*:;{}\\]+\\.[^/?*:;{}\\]+"

و"الأحرف واحد أو أكثر التي ليست أي من هؤلاء الصغار، ثم نقطة، ثم بعض أكثر الشخصيات التي ليست هذه منها."

و(طالما كنت على يقين من أن النقطة مطلوب حقا - إن لم يكن، انها ببساطة: "[^/?*:;{}\\]+"

نصائح أخرى

$a = preg_match('=^[^/?*;:{}\\\\]+\.[^/?*;:{}\\\\]+$=', 'file.abc');

^ ... $ - begin and end of the string
[^ ... ] - matches NOT the listed chars.

والتعبير المعتاد أن يكون شيء من هذا القبيل (لمدة ثلاث إلكتروني التمديد):

^[^/?*:;{}\\]+\.[^/?*:;{}\\]{3}$

وPHP يحتاج الخطوط المائلة العكسية هرب، وpreg_match() يحتاج مائلة هرب، لذلك:

$pattern = "/^[^\\/?*:;{}\\\\]+\\.[^\\/?*:;{}\\\\]{3}$/";

لتطابق أسماء مثل "hosts" أو ".htaccess"، استخدم هذا التعبير معدلة بشكل طفيف:

^[^/?*:;{}\\]*\.?[^/?*:;{}\\]+$

وفيما يلي التعبير المعتاد تستخدم لفحص يونكس اسم الملف في برنامج Golang:

    reg := regexp.MustCompile("^/[[:print:]]+(/[[:print:]]+)*$")
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top