รูปแบบที่คุณต้องการมีลักษณะดังนี้ ( ดูใน 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) แต่หวังว่าคุณจะสามารถเรียนรู้วิธีการเขียนรูปแบบด้วยตัวคุณเองตามข้อมูลข้างต้น