โค้ด PHP เพื่อลบทุกอย่างยกเว้นตัวเลข


139

ฉันพยายามลบทุกอย่างออกจากสตริง แต่เป็นเพียงตัวเลข (0-9)

คิดว่าคงได้ผล ..

echo preg_replace("[^0-9]","",'604-619-5135');

แต่มันสะท้อน "604-619-5135" ฉันหายไปไหน ???

คำตอบ:


282

ลองสิ่งนี้:

preg_replace('/[^0-9]/', '', '604-619-5135');

preg_replace ใช้ PCRE ซึ่งโดยทั่วไปเริ่มต้นและลงท้ายด้วยไฟล์/.


การอ้างอิงภายใน / คู่ไม่มีส่วนเกี่ยวข้องกับ PCRE tho เห็นได้ชัดว่า (ในวันก่อนหน้า(?flags)) ผู้ที่ออกแบบ / เขียนฟังก์ชัน / API คิดว่าเป็นความคิดที่ดีที่จะส่งผ่านแฟล็ก regex ด้วย/flagsรูปแบบเครื่องหมายคำพูดคู่แทนการใช้พารามิเตอร์ฟังก์ชันพิเศษ
Qtax

6
@Qtax: จุดดีใช่ฉันรู้ว่านั่นคือที่ที่เราได้คำว่า "grep" จาก ("g / re / p")
Chris Eberle

117

สำหรับนักพัฒนาในอนาคตคุณสามารถลองใช้สิ่งนี้ได้ เรียบง่ายเกินไป

echo preg_replace('/\D/', '', '604-619-5135');

42
สวัสดีฉันเป็นนักพัฒนาจากอนาคต สิ่งนี้ตอบสนองความต้องการของเราได้เป็นอย่างดี ขอบคุณ.
zesda

6
ฉันมาจากอนาคตที่ไกลกว่า Zesda และสามารถยืนยันได้ว่ามันยังคงเป็นความช่วยเหลือ
myshadowself

3
ฉันกลับมา 2 ในอนาคตและฉันยืนยันได้ว่าพวกเขายังไม่พบวิธีที่ดีกว่า
Eoin

6
ฉันเป็นนักพัฒนาคนสุดท้ายจากอนาคตที่ไกลที่สุด ฉันเสียใจที่ต้องบอกว่านี่ไม่ใช่ประโยชน์ใด ๆ อีกต่อไป พวกคุณไม่ควรใช้หลอดพลาสติกมากขนาดนี้เชื่อฉันสิว่าคุณจะเห็นเมื่อมาถึงที่นี่ .... ถ้าคุณทำมัน
Jeremy

3
แค่ FYI: พวกเราในศตวรรษที่ 39 ยังคงใช้สิ่งนี้
ผู้ใช้ -44651

11

คุณจะต้องใส่รูปแบบในตัวคั่น - โดยทั่วไปจะใช้เครื่องหมายทับ (/) ลองสิ่งนี้:

echo preg_replace("/[^0-9]/","",'604-619-5135');


3

วิธีที่เป็นประโยชน์มากขึ้นสำหรับผู้ที่ไม่ต้องการใช้ regex:

$data = filter_var($data, FILTER_SANITIZE_NUMBER_INT);

หมายเหตุ: ใช้งานได้กับหมายเลขโทรศัพท์ด้วย


FILTER_SANITIZE_NUMBER_INTออกจาก+เครื่องหมายบวกและลบ-ไม่ใช่ตัวเลขเท่านั้น
Qrzysio

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