2010-12-13 65 views

Trả lời

21

Bạn có thể sử dụng khẳng định lookahead để kiểm tra sự tồn tại của bất kỳ chữ số và bất kỳ thư như:

^(?=.*[a-zA-Z])(?=.*[0-9]) 
+0

Cảm ơn, nó hoạt động như một sự quyến rũ (: – FallenAngel

+2

Bạn có thể thả phần '. * $'. –

+0

@TimPietzcker: Bạn đang đúng. Cảm ơn. – codaddict

0
/.*?(?:[a-z].*?[0-9]|[0-9].*?[a-z]).*?/ 

(chỉ một giải pháp khả thi)

+0

gì về chữ in hoa? Ngoài ra những gì hiện '. *?' Làm chính xác và làm thế nào đến bạn sử dụng nó trước khi '|' nhưng không phải trong bit sau đó? – AlastairG

+0

Thêm cờ 'i',' *? 'Là một kết quả tham lam (google it). Và tôi quên làm điều đó ở phần thứ hai của đường ống. – poke

+2

Không phải là '*?' A * non * -greedy match? –

1
([0-9].*[a-zA-Z])\|([a-zA-Z].*[0-9]) 

Không chắc chắn nếu đường ống cần phải được thoát trong môi trường regexp của bạn hay không.

5

Sử dụng một regex duy nhất cho điều này có thể dẫn đến một chút không đọc được mã/không đáng tin cậy. Có thể có ý nghĩa hơn khi sử dụng các regex đơn giản hơn ví dụ: [0-9] để kiểm tra sự tồn tại của một chữ số và ngắt các yêu cầu của trình kiểm tra độ mạnh mật khẩu của bạn thành một dòng nhiều if. Ngoài ra, điều này cho phép bạn biết rõ hơn ở giai đoạn nào việc xác thực không thành công và có thể đưa ra đề xuất cho người dùng.

0

giải pháp đơn giản để kiểm tra mật khẩu có chứa ít nhất một lá thư, ít nhất một chữ số và không có khoảng trắng:

\S*(\S*([a-zA-Z]\S*[0-9])|([0-9]\S*[a-zA-Z]))\S* 
+1

Điều này khác với/cải thiện các câu trả lời hiện tại như thế nào? mô tả, đặc biệt trong trường hợp này. – Bowdzone

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