Regex สตริงหรืออีเมลว่างเปล่า


129

ฉันพบการตรวจสอบอีเมล Regex จำนวนมากใน SO แต่ฉันไม่พบสิ่งใดที่จะยอมรับสตริงว่าง เป็นไปได้ผ่าน Regex เท่านั้นหรือไม่? ยอมรับสตริงว่างเปล่าหรืออีเมลเท่านั้น? ฉันต้องการสิ่งนี้ใน Regex เท่านั้น

คำตอบ:


314

รูปแบบ regex นี้จะจับคู่สตริงว่าง:

^$

และสิ่งนี้จะจับคู่อีเมลหรือสตริงว่าง (อย่างหยาบคาย):

(^$|^.*@.*\..*$)

1
สิ่งที่ต้องพิจารณาการทำ ^ (|. * ​​@. * \ .. *) $ ควรมีผลเช่นเดียวกับที่ระบุว่าว่างเปล่าหรือใช้เพียง ^ และ $ ครั้งเดียวเพื่อทำให้เป็นระเบียบ
Runevault

1
มันค่อนข้างเก่า แต่ฉันเพิ่งเจอปัญหานี้และมีปัญหากับคำตอบ มีหลายกรณีที่จุดเริ่มต้นของสตริงถูกซ่อนไว้ แต่ยังคงจับคู่ได้โดย^ที่คุณกำลังมองหาอีเมลหรือไม่มีอะไรอยู่ตรงกลางสตริง สำหรับสิ่งนี้(email_regex)?เหมาะกว่า
jclancy

อย่าลืมอ่านความซับซ้อนของการตรวจสอบอีเมลก่อนที่จะพยายามใช้ RegEx เพื่อดำเนินการ stackoverflow.com/questions/201323/…
bryan kennedy

ซึ่งจะตรงกับอีเมลต่อไปนี้ test.test@test อันนี้ดีกว่านะฉันคิดว่า ^ $ | ^ [^ \ s @] + @ [^ \ s @] + \. [^ \ s @] + $ เพราะจะรับอีเมลเช่น test@test.se
dont_trust_me

ในแอปพลิเคชัน Java โดยเฉพาะ^$ไม่ทำงาน แต่^(?!.)ทำ: [ ^start of string, (?!)negative lookahead, .any character - not including linefeed]
LightCC

8

จับคู่สตริงว่างหรืออีเมล

(^$|^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.(?:[a-zA-Z]{2}|com|org|net|edu|gov|mil|biz|info|mobi|name|aero|asia|jobs|museum)$)

จับคู่สตริงว่างหรืออีเมล แต่ยังตรงกับจำนวนช่องว่าง

(^\s*$|^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.(?:[a-zA-Z]{2}|com|org|net|edu|gov|mil|biz|info|mobi|name|aero|asia|jobs|museum)$)

ดูเพิ่มเติมเกี่ยวกับอีเมลที่ตรงกับ regex เอง:

http://www.regular-expressions.info/email.html


2

คำตอบข้างต้นใช้งานได้ ($ สำหรับค่าว่าง) แต่ฉันเพิ่งลองทำสิ่งนี้และมันก็ใช้ได้เช่นกัน:

/\A(INTENSE_EMAIL_REGEX|)\z/i

สิ่งเดียวกันในลำดับย้อนกลับ

/\A(|INTENSE_EMAIL_REGEX)\z/i

0

อย่าจับคู่อีเมลกับนิพจน์ทั่วไป มันน่าเกลียดและยาวและซับซ้อนมากและตัวแยกวิเคราะห์ regex ของคุณอาจไม่สามารถจัดการกับมันได้ พยายามหารูทีนห้องสมุดเพื่อจับคู่ หากคุณต้องการแก้ปัญหาในทางปฏิบัติเท่านั้นในการจับคู่ที่อยู่อีเมล (นั่นคือถ้าคุณต้องการรหัสผิดที่เกิดขึ้น (โดยปกติ) ใช้งานได้) ให้ใช้ลิงก์ regular-expressions.info ที่คนอื่นส่งมา

สำหรับสตริงว่างนั้น^$มีหลายคนกล่าวถึงและจะทำงานได้ดี


13
regex ที่น่าเกลียดสามารถจัดการได้โดยตัวแยกวิเคราะห์ regex การไม่ใช้ regex เพียงเพราะมันน่าเกลียดนั้นโง่
ปีเตอร์

สิ่งนี้ไม่สร้างสรรค์ RegEx ได้รับการทดลองและทดสอบแล้ว (และยังห่างไกลจากความน่าเกลียด - คุณจะบอกว่ามันค่อนข้างสง่างามหรือไม่) การแนะนำไลบรารีอย่างคลุมเครือโดยไม่มีคำแนะนำใด ๆ เกี่ยวกับวิธีการแก้ปัญหาที่เป็นไปได้นั้นจะทำให้จุดประสงค์ของการตอบสนองลดลงเลย ทุกคนต้องบุ๊กมาร์ก: code.tutsplus.com/tutorials/…
pimbrouwers

Regexes เป็นเรื่องยากที่จะอ่านดูแลรักษาและแก้ไขข้อบกพร่องซึ่งทำให้พวกเขาเป็นผู้สมัครที่สำคัญสำหรับการแทนที่ด้วยการโทรไปที่ห้องสมุด
einnocent

2
สำหรับบันทึก: ฉันยินดีจะแนะนำห้องสมุดเฉพาะหากฉันรู้ว่า OP ใช้ภาษาอะไร เนื่องจากนี่เป็นคำถามที่ไม่เข้าใจเรื่องภาษาตัวเลือกของฉันจึงค่อนข้าง จำกัด
Kevin

2
Regex ไม่ควรจะสวย ด้วยเหตุผลดังกล่าวไม่มีใครควรใช้ regex หากคุณยืนกรานมากว่าห้องสมุดจะมาแทนที่ห้องสมุดนี้คุณคิดว่าห้องสมุดจะทำอะไร? มันจะมีโค้ดที่ยาวมากซับซ้อนหรือจะใช้ regex ... เมื่อถึงจุดนั้นคุณก็อาจใช้ "ไลบรารี" ของคุณเองก็ได้เช่นกัน และในปัจจุบันหากใครไม่ทราบวิธีใช้ regex พวกเขาอาจไม่ได้รับมอบหมายให้ตรวจสอบความถูกต้องที่อยู่อีเมลอีกต่อไป ...
Andrew

0

สิ่งนี้จะแก้ไขได้โดยจะยอมรับสตริงว่างหรือรหัสอีเมลที่แน่นอน

"^$|^([\w\.\-]+)@([\w\-]+)((\.(\w){2,3})+)$"

2
คุณช่วยอธิบายเพิ่มเติมได้ไหม
Vinay Prajapati

0

ฉันชอบ/^\s+$|^$/giจับคู่พื้นที่ว่างและว่างเปล่า

console.log("  ".match(/^\s+$|^$/gi));
console.log("".match(/^\s+$|^$/gi));


3
หากคุณใช้ ^ \ s * $ คุณไม่จำเป็นต้องใช้หรือกรณี นอกจากนี้ไม่จำเป็นต้องใช้ตัวปรับแต่ง g หรือ i เนื่องจากตรงกับทั้งบรรทัดและไม่เกี่ยวข้องกับอักขระใด ๆ กับตัวพิมพ์
Cadoo

0

หากคุณใช้ภายในราง - การตรวจสอบระเบียนที่ใช้งานอยู่คุณสามารถตั้งค่าได้ allow_blank: true

เช่น:

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