Regex ทุกอักขระที่ไม่ใช่ตัวเลขและตัวอักษรยกเว้นช่องว่างหรือเครื่องหมายทวิภาค


131

ฉันจะทำสิ่งนี้ได้อย่างไร?

โดยพื้นฐานแล้วฉันพยายามจับคู่อักขระเบ็ดเตล็ดทุกประเภทเช่นเครื่องหมายแอมเพอร์แซนด์อัฒภาคเครื่องหมายดอลลาร์ ฯลฯ


13
/[^a-zA-Z0-9\s\:]*/
Kelly

คำตอบ:


246
[^a-zA-Z\d\s:]
  • \ d - คลาสตัวเลข
  • \ s - ช่องว่าง
  • a-zA-Z - จับคู่ตัวอักษรทั้งหมด
  • ^ - ลบล้างทั้งหมด - ดังนั้นคุณจะได้รับ - อักขระที่ไม่ใช่ตัวเลขไม่ใช่ช่องว่างและไม่ใช่เครื่องหมายทวิภาค

นั่นคือสิ่งที่ฉันกำลังมองหา :)) - ฉันต้องส่งเสริมคำตอบที่สมบูรณ์แบบของคุณ
Tudor Constantin

7
สิ่งเดียวที่ฉันพบคือการลบอักขระพิเศษเช่นéหรือã ฉันต้องการ [^ \ w \ d \ s:]
Eric Belair

5
ลดลงเนื่องจากจะไม่จับอักขระที่ไม่ใช่ภาษาละตินหรืออักขระละติน "พิเศษ"
damian

\dและ\sมีขยาย Perl ซึ่งมักจะไม่ได้รับการสนับสนุนโดยเครื่องมือที่มีอายุมากกว่าชอบgrep, sed, tr, lexฯลฯ
tripleee

38

สิ่งนี้ควรทำ:

[^a-zA-Z\d\s:]

1
ส่วนที่เหลือตรวจสอบช่องว่าง แต่ไม่เว้นวรรคหรือมีการปฏิเสธในจุดที่ไม่ถูกต้องเพื่อลบล้างจริง
Zachary Scott

\ w จับขีดล่างด้วยซึ่งเป็นอักขระที่ไม่ใช่ตัวเลขและตัวอักษร
Tudor Constantin

Aha! ฉันจะแก้ไข - ฉันไม่รู้เรื่องนั้น ฉันคาดว่ามันจะทำงานแตกต่างกันไปสำหรับเครื่องยนต์ที่แตกต่างกัน แต่อาจให้คำตอบที่ปลอดภัยแก่ OP ด้วยเช่นกัน
Luke Sneeringer

2
ลดลงเนื่องจากจะไม่จับอักขระที่ไม่ใช่ภาษาละตินหรืออักขระละติน "พิเศษ"
damian

16

หากคุณต้องการใช้อักขระละตินที่เน้นเสียง (เช่น. àÑ) เป็นตัวอักษรปกติ (เช่นหลีกเลี่ยงการจับคู่ด้วย) คุณจะต้องรวมช่วง Unicode ที่เหมาะสม ( \ u00C0- \ u00FF ) ใน regex ของคุณด้วยเช่นกัน จะมีลักษณะดังนี้:

/[^a-zA-Z\d\s:\u00C0-\u00FF]/g
  • ^ ลบล้างสิ่งที่ตามมา
  • a-zA-Z จับคู่ตัวอักษรตัวพิมพ์ใหญ่และตัวพิมพ์เล็ก
  • \d ตรงกับตัวเลข
  • \s จับคู่พื้นที่สีขาว (หากคุณต้องการจับคู่เฉพาะช่องว่างให้แทนที่ด้วยช่องว่าง)
  • : จับคู่เครื่องหมายทวิภาค
  • \u00C0-\u00FF ตรงกับช่วง Unicode สำหรับอักขระละตินที่เน้นเสียง

nb การจับคู่ช่วง Unicode อาจใช้ไม่ได้กับเอนจินregex ทั้งหมด แต่ข้างต้นใช้งานได้ใน Javascript (ดังที่เห็นในปากกานี้บน Codepen)

NB2 หากคุณไม่กังวลเกี่ยวกับการจับคู่ขีดล่างคุณสามารถแทนที่a-zA-Z\dด้วย\wซึ่งตรงกับตัวอักษรตัวเลขและขีดล่าง


ช่วงนี้มีอักขระบางตัวที่ไม่ใช่ตัวอักษรและตัวเลขคละกัน (U + 00D7 และ U + 00F7) และไม่รวมอักขระเน้นเสียงที่ถูกต้องจำนวนมากจากภาษาที่ไม่ใช่ภาษาตะวันตกเช่นโปแลนด์เช็กเวียดนามเป็นต้น
Tripleee

1
โหวตให้คำอธิบายของแต่ละส่วนของ RegEx
morajabi

14

ลองสิ่งนี้:

[^a-zA-Z0-9 :]

ตัวอย่าง JavaScript:

"!@#$%* ABC def:123".replace(/[^a-zA-Z0-9 :]/g, ".")

ดูตัวอย่างออนไลน์:

http://jsfiddle.net/vhMy8/


3
ลดลงเนื่องจากจะไม่จับอักขระที่ไม่ใช่ภาษาละตินหรืออักขระละติน "พิเศษ"
damian

14
เป็นเรื่องง่ายที่จะลงคะแนนคำตอบและยังยากกว่าที่จะให้ข้อมูลที่สร้างสรรค์แก่คณะกรรมการเช่นแล้วจะจับอักขระที่ไม่ใช่ภาษาละตินหรืออักขระละติน "พิเศษ" ได้อย่างไร จากการนับของฉันที่นี่คุณได้โหวต 3 คำตอบด้วยเหตุผลเดียวกันและในความคิดของฉันสำหรับการปรับแต่งเล็กน้อย ตัวอย่างเช่นฉันมาที่นี่เพื่อค้นหานิพจน์ทั่วไปสำหรับสิ่งที่กล่าวถึงในคำตอบเหล่านี้ ฉันไม่สนใจชุดอักขระที่จะไม่ใช้ในแอปพลิเคชันของฉัน กฎแห่งการลดผลตอบแทน

แอรอนอาจ "ปรับแต่งเล็กน้อย" สำหรับพลเมืองสหรัฐฯ แต่มีความเกี่ยวข้องอย่างมากกับ ... ส่วนที่เหลือของโลกใบนี้
Michael K. Borregaard


4

หากคุณหมายถึง "อักขระที่ไม่ใช่ตัวเลขและตัวอักษร" ให้ลองใช้สิ่งนี้:

var reg =/[^a-zA-Z0-9]/g      //[^abc]

1

regex นี้ใช้ได้กับC # , PCREและGo to name

ใช้ไม่ได้กับ JavaScript บน Chrome จากสิ่งที่RegexBuddyกล่าว แต่มีตัวอย่างอยู่แล้วที่นี่

ส่วนหลักนี้คือ:

\p{L}

ซึ่งแสดงถึง\p{L}หรือ\p{Letter}ตัวอักษรชนิดใดก็ได้จากภาษาใด ๆ


regex แบบเต็ม: [^\w\d\s:\p{L}]

ตัวอย่าง: https://regex101.com/r/K59PrA/2


นี่เป็นคำตอบเดียวที่เกี่ยวข้องกับตัวอักษรที่เน้นเสียง Unicode อย่างถูกต้องในวิธีที่เหมาะสม น่าเสียดายที่เอ็นจิ้น regex บางตัวไม่รองรับสิ่งอำนวยความสะดวกนี้ (แม้แต่ Python ก็ไม่มีมันเช่น 3.8 แม้ว่าเอ็นจิ้น regex ของมันจะใช้ PCRE อย่างเห็นได้ชัดก็ตาม)
tripleee

1
ฉันจะลบ Python ออกจากคำตอบฉันคิดว่าฉันทดสอบแล้ว แต่ดูเหมือนจะไม่ใช่ ขอบคุณที่ชี้ให้เห็น
Ste

0

ลองเพิ่มสิ่งนี้:

^[^a-zA-Z\d\s:]*$

สิ่งนี้ได้ผลสำหรับฉัน ... :)


ดูเหมือนว่าจะทำซ้ำคำตอบที่ยอมรับจากปี 2011 ^และ$จุดยึดจะ จำกัด ให้ตรงกับบรรทัดทั้งหมดและตัว*ระบุปริมาณหมายความว่าตรงกับบรรทัดว่างด้วย
tripleee

0

ใน JavaScript:

/[^\w_]/g

^การปฏิเสธคือเลือกสิ่งที่ไม่อยู่ในชุดต่อไปนี้

\w อักขระคำใด ๆ (เช่นอักขระที่เป็นตัวเลขและตัวอักษรบวกขีดล่าง)

_ ลบขีดล่างเนื่องจากถือว่าเป็นอักขระ 'word'

ตัวอย่างการใช้งาน - const nonAlphaNumericChars = /[^\w_]/g;

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.