2012-08-16 13 views
13

tôi đang làm việc trên một ứng dụng Rails 3 mà cần phải xác nhận mật khẩu dựa trên các tiêu chí sau: must be at least 6 characters and include one number and one letter.Members Mật khẩu sử dụng Regex

Đây là Regex tôi:

validates :password, :format => {:with => /^[([a-z]|[A-Z])0-9_-]{6,40}$/, message: "must be at least 6 characters and include one number and one letter."} 

Ngay bây giờ nếu tôi đặt trong một mật khẩu của (ví dụ: dogfood) nó sẽ vượt qua. Nhưng điều tôi cần làm là vượt qua các tiêu chí trên.

Tôi không phải tất cả những gì tuyệt vời ở regex, vì vậy bất kỳ và tất cả trợ giúp đều được đánh giá cao!

Trả lời

27

Sử dụng lookahead khẳng định:

/^(?=.*[a-zA-Z])(?=.*[0-9]).{6,}$/ 
    |    |   | 
    |    |   | 
    |    |   Ensure there are at least 6 characters. 
    |    | 
    |    Look ahead for an arbitrary string followed by a number. 
    |       
    Look ahead for an arbitrary string followed by a letter. 

Về mặt kỹ thuật trong trường hợp này bạn không cần neo, nhưng đó là thói quen tốt để sử dụng chúng.

+0

wow, hoạt động hoàn hảo! cám ơn rất nhiều! Bạn có thể giải thích một chút về xác nhận lookahead? – dennismonsewicz

+3

Lookaheads nhìn về phía trước cho một mẫu, ở đây nó sẽ nhìn từ đầu cho bất cứ điều gì (.) 0 hoặc nhiều lần theo sau bởi [a-zA-Z] và cùng với [0-9]. Lookaheads không tiến lên vì vậy bạn sẽ vẫn ở vị trí 0 khi nói đến. {0,6} sẽ xác minh độ dài của 6+ – netigger

+0

Xem câu trả lời đã chỉnh sửa để giải thích. Nhưng @ DavidEverlöf cảm ơn bạn vì đã thêm một giải thích sâu hơn. –

Các vấn đề liên quan