การป้องกัน Cyrillic / Greek / Chinese ในสตริง - C # 4.0

เรามีระบบ (ใช้ ASP.NET C# 4.0) ที่รองรับอักขระกรีก ซีริลลิก และจีน แต่ดูเหมือนว่าระบบของบุคคลที่สามจะทำงานไม่ถูกต้อง เพื่อหลีกเลี่ยงปัญหาในการป้อนข้อมูลสำหรับระบบของบุคคลที่สาม ฉันต้องการจำกัดช่องข้อความให้ยอมรับเฉพาะอักขระภาษาอังกฤษหรืออักขระเน้นเสียง แต่ส่งคืนข้อผิดพลาดในการตรวจสอบความถูกต้องสำหรับอักขระอื่นๆ

ฉันจะทำสิ่งนี้ให้สำเร็จได้อย่างไร? ดูเหมือนว่าฉันจะสามารถใช้ regex ตามแนว \p{Latin} ได้ แต่จากประสบการณ์ของฉัน ดูเหมือนว่า C# จะไม่รองรับสิ่งนี้ เนื่องจากฉันได้รับข้อผิดพลาด Unknown property 'Latin'


person Andrew Johns    schedule 15.08.2013    source แหล่งที่มา


คำตอบ (1)


ใน .NET คุณสมบัติบล็อก Unicode จะต้องเขียนด้วย Is...:

[\p{IsGreek}\p{IsCyrillic}...]

รูปแบบเช่นนี้จะตรวจจับอักขระที่ไม่เหมาะสมทั้งหมดในกรณีของคุณ หากคุณต้องการยกเว้นทุกอย่างยกเว้น Latin คุณสามารถดำเนินการดังนี้:

[^\p{IsBasicLatin}\p{IsLatin-1Supplement}\p{IsLatinExtended-A}\p{IsLatinExtended-B}]

ซึ่งครอบคลุมโค้ดทั้งหมดจนถึง U+024F

สำหรับรายการชื่อบล็อกที่รองรับ ดู MSDN

person Martin Ender    schedule 15.08.2013
comment
อ๋อ ใช่ ฉันค้นหารายการก่อนหน้านี้แต่หาไม่พบ ฉันลองใช้ IsLatin แล้ว แต่ฉันเห็นว่าไม่อยู่ในรายการ คุณต้องระบุให้เจาะจงมากขึ้น สมบูรณ์แบบ. - person Andrew Johns; 15.08.2013