ดึกแค่โพสต์นี้ แต่ฉันมีบางอย่างที่แตกต่างออกไปเล็กน้อยที่จะพูด ...
>> "Are email addresses case sensitive?"
ดี"มันขึ้นอยู่กับ ..." (TM)
บางองค์กรคิดว่าเป็นความคิดที่ดีจริง ๆ และเซิร์ฟเวอร์อีเมลของพวกเขาบังคับใช้เรื่องเล็ก ๆ น้อย ๆ
ดังนั้นสำหรับสถานที่ที่บ้าเหล่านั้น "ใช่อีเมลจะต้องตรงตามตัวพิมพ์ใหญ่ - เล็ก"
หมายเหตุ: เพียงเพราะสเปคบอกว่าคุณสามารถทำบางสิ่งได้ไม่ได้หมายความว่าควรทำเช่นนั้น
หลักการของ KISS แสดงให้เห็นว่าระบบของเราใช้อีเมลที่ไม่ตรงตามตัวพิมพ์ใหญ่และตัวพิมพ์เล็ก
ในขณะที่หลักการความแข็งแกร่งชี้ให้เห็นว่าเรายอมรับอีเมลที่เป็นตัวพิมพ์เล็กและตัวพิมพ์ใหญ่
สารละลาย:
- เก็บอีเมลด้วยตัวพิมพ์เล็กและตัวพิมพ์ใหญ่
- ส่งอีเมลด้วยตัวพิมพ์เล็กและตัวพิมพ์ใหญ่
- ดำเนินการค้นหาภายในด้วยตัวพิมพ์เล็กและตัวพิมพ์ใหญ่
ซึ่งหมายความว่าหากมีอีเมลนี้อยู่แล้ว: user@x.com
... และผู้ใช้รายอื่นเข้ามาและต้องการใช้อีเมลนี้: USER@x.com
... ว่าตรรกะการค้นหาแบบตัวพิมพ์เล็กและใหญ่ของเราจะส่งคืนข้อผิดพลาด "อีเมลนั้นมีอยู่แล้ว"
ตอนนี้คุณมีการตัดสินใจที่จะทำ: การแก้ปัญหาที่เพียงพอในกรณีของคุณ?
หากไม่มีคุณสามารถเรียกเก็บค่าธรรมเนียมความสะดวกสบายให้กับลูกค้าที่ต้องการการสนับสนุนอีเมลที่อ่อนไหวกรณีและใช้ตรรกะที่กำหนดเองที่อนุญาตให้ USER@x.com เข้าสู่ระบบของคุณแม้ว่า user@x.com จะมีอยู่แล้ว
ในกรณีนี้ตรรกะการค้นหา / การตรวจสอบอีเมลของคุณอาจดูเหมือนรหัสเทียมนี้:
if (user.paidEmailFee) {
// case sensitive email
query = "select * from users where email LIKE ' + user.email + '"
} else {
// case insensitive email
query = "select * from users where email ILIKE ' + user.email + '"
}
ด้วยวิธีนี้คุณส่วนใหญ่บังคับใช้กรณีที่ไม่รู้สึกตัว แต่ให้ลูกค้าชำระเงินสำหรับการสนับสนุนนี้หากพวกเขาใช้ระบบอีเมลที่สนับสนุนเรื่องไร้สาระดังกล่าว
ps ILIKE เป็นคำหลักของ PostgreSQL: http://www.postgresql.org/docs/9.2/static/functions-matching.html