TL; DR
เพียงแค่เพิ่มพื้นที่ในของตัวละครคลาส
^[a-zA-Z0-9_ ]*$
ตอนนี้ถ้าคุณต้องการเข้มงวด ...
ด้านบนไม่ถูกต้อง เนื่องจากความจริงที่*
หมายถึงศูนย์หรือมากกว่านั้นจะจับคู่ทุกกรณีต่อไปนี้ซึ่งมักจะไม่ตรงกับ:
- สตริงว่าง ""
- สตริงประกอบด้วยช่องว่างทั้งหมด ""
- สตริงที่นำไปสู่และ / หรือเส้นทางที่มีช่องว่าง "Hello World"
- สตริงที่มีช่องว่างหลายช่องระหว่างคำว่า "Hello World"
แต่เดิมฉันไม่คิดว่ารายละเอียดดังกล่าวมีค่าควรแก่การเข้าร่วมเพราะ OP ได้ถามคำถามพื้นฐานที่ดูเหมือนว่าความเข้มงวดไม่ได้เป็นปัญหา ตอนนี้คำถามได้รับความนิยม แต่ฉันต้องการจะบอกว่า ...
... ใช้@ คำตอบของ
ซึ่งในรสชาติของฉัน (ไม่ใช้\w
) แปลเป็น:
^[a-zA-Z0-9_]+( [a-zA-Z0-9_]+)*$
(โปรดโหวต @stema โดยไม่คำนึงถึง)
บางสิ่งที่ควรทราบเกี่ยวกับคำตอบ (และของ @ stema) นี้:
หากคุณต้องการอนุญาตให้มีช่องว่างระหว่างคำหลายคำ (เช่นถ้าคุณต้องการอนุญาตให้เว้นวรรคสองครั้งโดยไม่ตั้งใจหรือหากคุณกำลังทำงานกับข้อความที่คัดลอกมาจาก PDF) ให้เพิ่มอีกหนึ่งช่อง+
หลัง
^\w+( +\w+)*$
หากคุณต้องการอนุญาตแท็บและบรรทัดใหม่ (อักขระช่องว่าง) ให้แทนที่ช่องว่างด้วย\s+
:
^\w+(\s+\w+)*$
ที่นี่ฉันแนะนำ+
โดยค่าเริ่มต้นเพราะตัวอย่างเช่น linebreaks ของ Windows ประกอบด้วยอักขระช่องว่างสองตัวตามลำดับ\r\n
ดังนั้นคุณจะต้อง+
จับทั้งคู่
ยังไม่ทำงานใช่ไหม
ตรวจสอบภาษาที่คุณใช้ *ในภาษาเช่น Java คุณจะต้องหลบหนีออกเครื่องหมายของคุณคือ และ\\w
\\s
ในภาษาแก่กว่าหรือขั้นพื้นฐานมากขึ้นและระบบสาธารณูปโภคเช่นsed
, \w
และ\s
ไม่ได้กำหนดไว้เพื่อให้พวกเขาเขียนออกมาพร้อมกับการเรียนของตัวละครเช่น [a-zA-Z0-9_]
และ[\f\n\p\r\t]
ตามลำดับ
*ฉันรู้ว่าคำถามนี้ถูกแท็กvb.netแต่ขึ้นอยู่กับการดูมากกว่า 25,000 ครั้งฉันเดาว่าไม่ใช่เฉพาะคนที่เจอคำถามนี้เท่านั้น ขณะนี้ก็เป็นครั้งแรกใน google คำค้นหาแสดงออกปกติคำพื้นที่