โซลูชันข้างต้นดีกว่าโดยเฉพาะอย่างยิ่งหากใช้ Java และพบตัวเลขมากกว่า 10 หลักเช่นรหัสนำหน้ารหัสสากลหรือหมายเลขส่วนขยายเพิ่มเติม วิธีแก้ปัญหานี้เป็นพื้นฐาน (ฉันเป็นมือใหม่ในโลก regex) และได้รับการออกแบบโดยคำนึงถึงหมายเลขโทรศัพท์ของสหรัฐอเมริกาและมีประโยชน์สำหรับสตริงที่มีตัวเลขเพียง 10 ตัวซึ่งอาจมีการจัดรูปแบบอักขระบางตัวหรืออาจไม่มีการจัดรูปแบบอักขระเลย (มีเพียง 10 หมายเลข ). ด้วยเหตุนี้ฉันจึงขอแนะนำโซลูชันนี้สำหรับแอปพลิเคชันกึ่งอัตโนมัติเท่านั้น โดยส่วนตัวแล้วฉันชอบจัดเก็บตัวเลขเป็นตัวเลขเพียง 10 ตัวโดยไม่ต้องจัดรูปแบบตัวอักษร แต่ก็ต้องการที่จะสามารถแปลงหรือล้างหมายเลขโทรศัพท์ให้เป็นรูปแบบมาตรฐานที่คนทั่วไปและแอป / โทรศัพท์จะจดจำได้ทันทีตามต้องการ
ฉันเจอโพสต์นี้โดยมองหาสิ่งที่ฉันสามารถใช้กับแอพทำความสะอาดข้อความที่มีความสามารถ PCRE Regex (แต่ไม่มีฟังก์ชัน java) ฉันจะโพสต์สิ่งนี้ไว้ที่นี่สำหรับผู้ที่สามารถใช้โซลูชัน Regex ที่เรียบง่ายซึ่งสามารถทำงานได้กับโปรแกรมแก้ไขข้อความตัวทำความสะอาดตัวขยายหรือแม้แต่ผู้จัดการคลิปบอร์ด ส่วนตัวผมใช้ Sublime และ TextSoap โซลูชันนี้สร้างขึ้นสำหรับ Text Soap เนื่องจากอยู่ในแถบเมนูและมีเมนูแบบเลื่อนลงที่คุณสามารถเรียกใช้การดำเนินการจัดการข้อความกับสิ่งที่เคอร์เซอร์เลือกหรือสิ่งที่อยู่ในคลิปบอร์ด
แนวทางของฉันโดยพื้นฐานแล้วคือการแทนที่ / การค้นหาและการแทนที่ regexes สองครั้ง การค้นหาและแทนที่การแทนที่แต่ละรายการเกี่ยวข้องกับนิพจน์ทั่วไปสองรายการหนึ่งรายการสำหรับการค้นหาและอีกรายการหนึ่งสำหรับการแทนที่
การเปลี่ยนตัว / ค้นหาและแทนที่ # 1
- การแทนที่ / ค้นหาและแทนที่ครั้งแรกจะดึงตัวเลขที่ไม่ใช่ตัวเลขจากตัวเลข 10 หลักเป็นสตริง 10 หลัก
การแทนที่ครั้งแรก / การค้นหา Regex:\D
- สตริงการค้นหานี้จับคู่อักขระทั้งหมดที่ไม่ใช่ตัวเลข
First Substitution / Replace Regex: "" (ไม่มีแม้แต่ช่องว่าง)
- เว้นช่องแทนที่ว่างไว้อย่างสมบูรณ์ไม่ควรมีช่องว่างรวมถึงช่องว่าง ซึ่งจะส่งผลให้อักขระที่ไม่ใช่ตัวเลขที่ตรงกันทั้งหมดถูกลบออก คุณควรใช้ตัวเลข 10 หลัก + การจัดรูปแบบอักขระก่อนการดำเนินการนี้และออกมาพร้อมกับตัวเลข 10 หลักที่มีการจัดรูปแบบอักขระ
การเปลี่ยนตัว / ค้นหาและแทนที่ # 2
- การเปลี่ยนตัวผู้เล่นสอง / ค้นหาและแทนที่การค้นหาเป็นส่วนหนึ่งของกลุ่มจับการดำเนินงานสำหรับรหัสพื้นที่
$1
กลุ่มการจับภาพสำหรับชุดที่สองในสามของจำนวนและกลุ่มจับภาพสุดท้ายสำหรับชุดสุดท้ายของตัวเลขสี่$2
$3
นิพจน์ทั่วไปสำหรับส่วนที่ใช้แทนของการดำเนินการจะแทรกการจัดรูปแบบหมายเลขโทรศัพท์ของสหรัฐอเมริกาไว้ระหว่างกลุ่มตัวเลขที่จับได้
การแทนที่ครั้งที่สอง / การค้นหา Regex:(\d{3})(\d{3})(\d{4})
การเปลี่ยนตัวครั้งที่สอง / แทนที่ Regex:\($1\) $2\-$3
เครื่องหมาย\
หนีตัวอักษรพิเศษ(
, )
,
(<-whitespace) และ-
เนื่องจากเราใส่ไว้ระหว่างตัวเลขจับเราในกลุ่มจับภาพ$1
, $2
และ$3
หมายเลขโทรศัพท์ของสหรัฐอเมริกาจัดรูปแบบวัตถุประสงค์
ใน TextSoap ฉันได้สร้างตัวล้างแบบกำหนดเองซึ่งรวมถึงการดำเนินการการดำเนินการทดแทนสองรายการดังนั้นในทางปฏิบัติจึงรู้สึกเหมือนกับการเรียกใช้สคริปต์ ฉันแน่ใจว่าโซลูชันนี้สามารถปรับปรุงได้ แต่ฉันคาดหวังว่าจะมีความซับซ้อนเพิ่มขึ้นเล็กน้อย เวอร์ชันปรับปรุงของโซลูชันนี้ยินดีเป็นประสบการณ์การเรียนรู้หากใครต้องการเพิ่มสิ่งนี้