รูปแบบที่คุณต้องการมีลักษณะดังนี้ ( ดูใน rubular.com ):
^[a-zA-Z0-9_.-]*$
คำอธิบาย:
^
เป็นจุดเริ่มต้นของจุดยึดสาย
$
คือจุดสิ้นสุดของจุดยึดสาย
[...]
คือนิยามคลาสอักขระ
*
คือการทำซ้ำแบบ "ศูนย์หรือมากกว่า"
โปรดสังเกตว่าเส้นประตามตัวอักษร-
เป็นอักขระสุดท้ายในนิยามคลาสอักขระมิฉะนั้นจะมีความหมายที่แตกต่างออกไป (เช่น range) .
นอกจากนี้ยังมีความหมายนิยามคลาสนอกตัวละครที่แตกต่างกัน แต่ภายในมันเป็นเพียงแค่ตัวอักษร.
อ้างอิง
ใน PHP
นี่คือตัวอย่างข้อมูลเพื่อแสดงวิธีใช้รูปแบบนี้:
<?php
$arr = array(
'screen123.css',
'screen-new-file.css',
'screen_new.js',
'screen new file.css'
);
foreach ($arr as $s) {
if (preg_match('/^[\w.-]*$/', $s)) {
print "$s is a match\n";
} else {
print "$s is NO match!!!\n";
};
}
?>
ภาพพิมพ์ด้านบน ( ตามที่เห็นใน ideone.com ):
screen123.css is a match
screen-new-file.css is a match
screen_new.js is a match
screen new file.css is NO match!!!
สังเกตว่ารูปแบบจะแตกต่างกันเล็กน้อยโดยใช้\w
แทน นี่คือคลาสอักขระสำหรับ "อักขระคำ"
การอ้างอิง API
หมายเหตุเกี่ยวกับข้อกำหนด
สิ่งนี้ดูเหมือนจะเป็นไปตามข้อกำหนดของคุณ แต่โปรดทราบว่าสิ่งนี้จะตรงกับสิ่งต่างๆเช่น.....
ฯลฯ ซึ่งอาจใช่หรือไม่ใช่สิ่งที่คุณต้องการ หากคุณสามารถระบุรูปแบบที่คุณต้องการจับคู่ได้เฉพาะเจาะจงมากขึ้นนิพจน์ทั่วไปจะซับซ้อนขึ้นเล็กน้อย
regex ข้างต้นยังตรงกับสตริงว่าง หากคุณต้องการอย่างน้อยหนึ่งอักขระให้ใช้+
(หนึ่งหรือมากกว่า) แทน*
(ศูนย์หรือมากกว่า) สำหรับการทำซ้ำ
ไม่ว่าในกรณีใดคุณสามารถชี้แจงข้อกำหนดของคุณเพิ่มเติมได้ (ช่วยได้เสมอเมื่อถามคำถาม regex) แต่หวังว่าคุณจะสามารถเรียนรู้วิธีการเขียนรูปแบบด้วยตัวคุณเองตามข้อมูลข้างต้น