ฉันพบการตรวจสอบอีเมล Regex จำนวนมากใน SO แต่ฉันไม่พบสิ่งใดที่จะยอมรับสตริงว่าง เป็นไปได้ผ่าน Regex เท่านั้นหรือไม่? ยอมรับสตริงว่างเปล่าหรืออีเมลเท่านั้น? ฉันต้องการสิ่งนี้ใน Regex เท่านั้น
ฉันพบการตรวจสอบอีเมล Regex จำนวนมากใน SO แต่ฉันไม่พบสิ่งใดที่จะยอมรับสตริงว่าง เป็นไปได้ผ่าน Regex เท่านั้นหรือไม่? ยอมรับสตริงว่างเปล่าหรืออีเมลเท่านั้น? ฉันต้องการสิ่งนี้ใน Regex เท่านั้น
คำตอบ:
รูปแบบ regex นี้จะจับคู่สตริงว่าง:
^$
และสิ่งนี้จะจับคู่อีเมลหรือสตริงว่าง (อย่างหยาบคาย):
(^$|^.*@.*\..*$)
^
ที่คุณกำลังมองหาอีเมลหรือไม่มีอะไรอยู่ตรงกลางสตริง สำหรับสิ่งนี้(email_regex)?
เหมาะกว่า
^$
ไม่ทำงาน แต่^(?!.)
ทำ: [ ^
start of string, (?!)
negative lookahead, .
any character - not including linefeed]
จับคู่สตริงว่างหรืออีเมล
(^$|^[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 เอง:
คำตอบข้างต้นใช้งานได้ ($ สำหรับค่าว่าง) แต่ฉันเพิ่งลองทำสิ่งนี้และมันก็ใช้ได้เช่นกัน:
/\A(INTENSE_EMAIL_REGEX|)\z/i
สิ่งเดียวกันในลำดับย้อนกลับ
/\A(|INTENSE_EMAIL_REGEX)\z/i
อย่าจับคู่อีเมลกับนิพจน์ทั่วไป มันน่าเกลียดและยาวและซับซ้อนมากและตัวแยกวิเคราะห์ regex ของคุณอาจไม่สามารถจัดการกับมันได้ พยายามหารูทีนห้องสมุดเพื่อจับคู่ หากคุณต้องการแก้ปัญหาในทางปฏิบัติเท่านั้นในการจับคู่ที่อยู่อีเมล (นั่นคือถ้าคุณต้องการรหัสผิดที่เกิดขึ้น (โดยปกติ) ใช้งานได้) ให้ใช้ลิงก์ regular-expressions.info ที่คนอื่นส่งมา
สำหรับสตริงว่างนั้น^$
มีหลายคนกล่าวถึงและจะทำงานได้ดี
สิ่งนี้จะแก้ไขได้โดยจะยอมรับสตริงว่างหรือรหัสอีเมลที่แน่นอน
"^$|^([\w\.\-]+)@([\w\-]+)((\.(\w){2,3})+)$"
ฉันชอบ/^\s+$|^$/gi
จับคู่พื้นที่ว่างและว่างเปล่า
console.log(" ".match(/^\s+$|^$/gi));
console.log("".match(/^\s+$|^$/gi));
หากคุณใช้ภายในราง - การตรวจสอบระเบียนที่ใช้งานอยู่คุณสามารถตั้งค่าได้
allow_blank: true
เช่น:
validates :email, allow_blank: true, format: { with: EMAIL_REGEX }