2012-01-19 44 views
13

Bất kỳ ai cũng có thể biết cách viết Regex cho chuỗi sao cho phải có alpha+numeric (tức là cả chữ cái và chữ số).Cần regex cho chuỗi phải có cả ký tự số và chữ cái

hợp lệ:

a123sss 
12dfgfd 

không hợp lệ:

aaaa 
1111 

Tôi cố gắng này ^[a-zA-Z0-9]*$ nhưng nó luôn luôn đưa ra true.

EDIT: đây cũng là hợp lệ: 123-abc

+2

Dường như câu hỏi này sẽ giúp bạn: http://stackoverflow.com/questions/1051989/regex-for-alphanumeric-but-at-least-one-character – Niklas

+0

Điều này không hợp lệ hoặc hợp lệ: '1234abcd'? – Abel

+0

'ABel' Thay đổi nhỏ hợp lệ ngay cả khi tôi có thể nhận được một ký tự đặc biệt như' -' u có thể cho tôi cho rằng – Chaitanya

Trả lời

31

Nghe có vẻ như bạn đang nói chuỗi đòi hỏi cả hai ký tự chữ và số: nó không thể có ký tự chữ, hoặc chỉ ký tự số.

Như vậy, chuỗi phải:

  • Một hoặc nhiều ký tự số, theo sau là một hoặc nhiều ký tự chữ cái, tiếp theo là 0 hoặc các ký tự chữ và số hơn

hoặc

  • Một hoặc nhiều ký tự chữ cái, theo sau bởi một hoặc nhiều ký tự số, theo sau là 0 hoặc nhiều ký tự chữ và số racters

Do đó, một regex mà làm việc là

^([0-9]+[a-zA-Z]+|[a-zA-Z]+[0-9]+)[0-9a-zA-Z]*$ 
+3

Câu trả lời hay nhất, +1. Chào mừng bạn đến với SO! – stema

+0

Xin chào 'Patchi' bạn có thể đưa nó cho trường hợp này quá '123-abc' – Chaitanya

+0

Câu trả lời hay không. Bạn có thể thay thế '[0-9]' bằng '\ d' và nếu bạn muốn cho phép á, ê, ç, ß, ğ, ł, ħ, dž vv (các chữ cái cần thiết hợp lệ ở nhiều quốc gia), hãy sử dụng' \ p {L} 'thay vì [a-zA-Z]. – Abel

0

Nếu bạn chỉ muốn đảm bảo rằng nó có chứa cả số và chữ (và bạn không quan tâm nếu nó bao gồm các nhân vật khác cũng) bạn có thể sử dụng:

/\[0-9]+[a-zA-Z]+|[a-zA-Z]+[0-9]+/ 
1

tôi không biết nếu asp.net hỗ trợ lookahead, nhưng nếu có, regex này không được công việc:

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

ASP.NET hỗ trợ lookahead. Phiên bản hơi ngắn này cũng nên hoạt động sau đó: '^ (? =. * \ D) (? =. * \ P {L})'. Nhưng giải pháp của bạn có cho phép các ký tự khác, như dấu chấm câu không? – Abel

+0

@ Abel: Vâng, bạn nghiêm khắc, tôi đã đọc sai câu hỏi. Đã cập nhật câu trả lời. – Toto

2

Một số giải pháp tốt nhất đã được đăng, nhưng kể từ khi OP không xác định những gì alfa và những gì có nghĩa là số, có lẽ là một câu trả lời đơn giản như sau:

^(\d+\p{L}+|\p{L}+\d+)+$ 

nơi:

  • \d là số bất kỳ
  • \p{L} là bất kỳ lá thư, bao gồm cả chữ cái có dấu, giống như A, C, vv
  • (..) cho nhóm, t o ngăn chặn nhận xét đáng chú ý của M42, cảm ơn! (hoặc lặp lại^và $)

Điều này sẽ khớp với tất cả: ßğł123ħdža3b, 123abc. 1a2b3c, ȬȭɓʥɶÂË32 v.v.

+0

Điều này khớp với '1a.b' – Toto

+0

@ M42: Tôi thấy nó bây giờ, xấu của tôi, đã sửa nó, cảm ơn – Abel

+0

: Bạn được chào đón, +1. – Toto

0

này hoạt động:

^(\d+[A-Za-z_-]+|[A-Za-z_-]+\d+)[A-Za-z_-\d]*$ 

Nó tìm kiếm hoặc vài chữ số sau đó vài ký tự; HOẶC vài ký tự, tiếp theo là vài chữ số. Sau đó, có thể có bất kỳ kết hợp của các ký tự và chữ số, hoặc không có gì.

+0

Tôi tự hỏi tại sao @Abel đã chỉnh sửa hầu hết mọi câu trả lời trong chuỗi này? – Serge

+1

Có, lạ huh! Tất cả các màu đã sai, tôi đã thêm '' vào mỗi câu trả lời để sửa lỗi đó (không có màu regex). Tôi đã đề cập như vậy trong nhật ký lịch sử, nơi bạn có thể thấy điều đó (hoặc hoàn nguyên nếu bạn không đồng ý). Xem thêm: http://meta.stackexchange.com/questions/981/syntax-highlighting-language-hints – Abel

+0

Ồ tôi hiểu rồi. Vậy xin cảm ơn! – Serge

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