Trong trang asp.net của tôi, tôi có một hộp đầu vào mà phải có xác nhận sau vào nó:regex cho chữ và số, nhưng ít nhất một ký tự
Phải là chữ và số, có ít nhất 1 ký tự (ví dụ có thể không TẤT CẢ số).
Trong trang asp.net của tôi, tôi có một hộp đầu vào mà phải có xác nhận sau vào nó:regex cho chữ và số, nhưng ít nhất một ký tự
Phải là chữ và số, có ít nhất 1 ký tự (ví dụ có thể không TẤT CẢ số).
^\d*[a-zA-Z][a-zA-Z0-9]*$
Về cơ bản, điều này có nghĩa là:
Hãy thử một vài thử nghiệm và bạn sẽ thấy điều này sẽ vượt qua bất kỳ chuỗi ASCII chữ và số nào mà ít nhất một ký tự ASCII không phải là số được yêu cầu.
Chìa khóa cho điều này là \d*
ở mặt trước. Nếu không có nó thì regex sẽ trở nên khó xử hơn nhiều.
^[0-9]*[A-Za-z][0-9A-Za-z]*$
là regex sẽ làm những gì bạn đang theo dõi.^Và $ khớp với phần đầu và cuối của từ để ngăn các ký tự khác. Bạn có thể thay thế khối [0-9A-z] bằng \ w, nhưng tôi thích dạng chi tiết hơn vì nó dễ mở rộng hơn với các ký tự khác nếu bạn muốn.
Thêm trình xác thực biểu thức chính quy vào trang asp.net của bạn theo hướng dẫn trên MSDN: http://msdn.microsoft.com/en-us/library/ms998267.aspx.
này có thể chứa tất cả các số, phải không? – akf
bỏ sót chút ít về việc cần ít nhất một ký tự - tôi đã chỉnh sửa để buộc ít nhất một ký tự – Dexter
Nếu bạn không chụp, bạn không cần() ngoại trừ nhóm và [] tạo một nhóm tiền phạt. A-z không chỉ là chữ cái. Bạn có thể có nghĩa là [0-9A-Za-z] * [A-Za-z] [0-9A-Za-z] * –
^\w*[\p{L}]\w*$
Điều này không khó. Biểu thức chính quy đọc: khớp với một dòng bắt đầu với bất kỳ số ký tự từ nào (chữ cái, số, dấu câu (mà bạn có thể không muốn)), có chứa một ký tự chữ cái (đó là phần [\p{L}]
ở giữa), theo sau là bất kỳ số nào từ ký tự một lần nữa.
Nếu bạn muốn loại trừ dấu chấm câu, bạn sẽ cần một biểu hiện heftier:
^[\p{L}\p{N}]*[\p{L}][\p{L}\p{N}]*$
Và nếu bạn không quan tâm đến Unicode bạn có thể sử dụng một biểu nhàm chán:
^[A-Za-z0-9]*[A-Za-z][A-Za-z0-9]*$
Bạn cần^và $ đổi chỗ. –
@R. Pate: Cảm ơn. Nó sẽ không được mã nếu nó không có lỗi. – Welbog
^[\p{L}\p{N}]*\p{L}[\p{L}\p{N}]*$
Giải thích:
[\p{L}\p{N}]*
phù hợp không hay nhiều chữ Unicode hoặc số\p{L}
trận đấu một bức thư[\p{L}\p{N}]*
trận đấu không hay nhiều chữ Unicode hoặc số^
và $
neo chuỗi, đảm bảo regex khớp với toàn bộ chuỗi. Bạn có thể bỏ qua những điều này, tùy thuộc vào chức năng phù hợp với regex bạn gọi.Kết quả: bạn có thể có bất kỳ chuỗi ký tự chữ và số nào trừ khi phải có chữ cái ở đâu đó.
\p{L}
tương tự như [A-Za-z]
ngoại trừ nó sẽ bao gồm tất cả các chữ cái từ tất cả các bảng chữ cái, có hoặc không có dấu trọng âm và dấu phụ. Nó bao gồm nhiều hơn, sử dụng một bộ ký tự Unicode lớn hơn. Nếu bạn không muốn thay thế linh hoạt đó [A-Za-z]
. Một nhận xét tương tự áp dụng cho \p{N}
có thể được thay thế bằng [0-9]
nếu bạn muốn giữ cho nó đơn giản. Xem MSDN page on character classes để biết thêm thông tin.
Phiên bản phi Unicode ít ưa thích sẽ là
^[A-Za-z0-9]*[A-Za-z][A-Za-z0-9]*$
\ p {N} sẽ khớp với các số Unicode, chẳng hạn như ① ②. Điều này có thể gây ngạc nhiên cho một số. –
và \ p {L} cũng khớp với chữ cái Trung Quốc. trước khi sử dụng .. –
Chuyển phần đầu tiên, [\ p {L} \ p {N}] * thành \ p {N} * đơn giản hóa lời giải thích và ngăn chặn một số theo dõi ngược lại. –
^[0-9]*[a-zA-Z][a-zA-Z0-9]*$
Có thể
Không giống như trên cùng Chỉ cần với \ d thay thế bằng [0-9] –
Vâng, vâng, tôi không thấy rằng tại thời điểm đăng bài – eKek0
Hầu hết các câu trả lời cho câu hỏi này là chính xác, nhưng có một sự thay thế, mà (trong một số trường hợp) cung cấp linh hoạt hơn nếu bạn muốn thay đổi các quy tắc sau:
^(?=.*[a-zA-Z].*)([a-zA-Z0-9]+)$
Điều này sẽ khớp với bất kỳ chuỗi ký tự chữ và số nào, nhưng chỉ khi nhóm đầu tiên cũng khớp với toàn bộ chuỗi. Đó là một mẹo nhỏ trong các biểu thức chính quy cho phép bạn xử lý một số vấn đề xác thực rất khó khăn.
Ví dụ: giả sử bạn cần thêm ràng buộc khác: chuỗi phải dài từ 6 đến 12 ký tự. Các giải pháp rõ ràng được đăng ở đây sẽ không hoạt động, nhưng bằng cách sử dụng mẹo tìm kiếm trước, regex chỉ đơn giản là trở thành:
^(?=.*[a-zA-Z].*)([a-zA-Z0-9]{6,12})$
Mục đích thứ hai là gì? * có? –
Không :-) Nó có thể được an toàn ommitted . –
Tôi biết rằng đây là một bài viết rất cũ nhưng điều này đã giúp tôi tiết kiệm rất nhiều thời gian và rắc rối hiện nay. LƯU Ý: trong mẫu thứ hai, yêu cầu * IS thứ hai nếu bạn muốn nó thực thi đúng. Cảm ơn một lần nữa. –
"Một ký tự chữ và số" phải đọc "Một ký tự chữ cái" hoặc tương tự: phần đó của regex không bao gồm chữ số. –
\ d * là thông minh! –
@ R.Pate: khá đúng. Đã sửa. Cảm ơn. – cletus