Tôi luôn phải vật lộn với những điều darn này. Tôi nhớ lại một giảng viên nói với chúng tôi tất cả một lần rằng nếu bạn có một vấn đề mà đòi hỏi bạn sử dụng các biểu thức thông thường để giải quyết nó, bạn trong thực tế bây giờ có 2 vấn đề.Tên người dùng không thể chứa dấu gạch dưới hoặc khoảng thời gian
Vâng, tôi chắc chắn đồng ý với điều này. Regex là thứ mà chúng tôi không sử dụng thường xuyên nhưng khi chúng tôi thực sự thích đọc một số ngôn ngữ ngoài hành tinh (tốt cho tôi) ... Tôi nghĩ tôi sẽ giải quyết để đọc sách và đọc thêm.
Thách thức tôi có được điều này, tôi cần phải xác nhận tên người dùng dựa trên các tiêu chí sau:
- có thể chứa các chữ cái, trên và dưới
- có thể chứa số
- có thể chứa dấu chấm câu (
.
) và dấu gạch dưới (_
) - dấu chấm và dấu gạch dưới không thể liên tiếp tức là
__
..
không được phép nhưng._._
sẽ hợp lệ. - tối đa là 20 ký tự trong tổng
Cho đến nay tôi đã điều sau đây: ^[a-zA-Z_.]{0,20}$
nhưng tất nhiên nó cho phép dấu gạch lặp lại và thời gian.
Bây giờ, tôi có thể làm điều này tất cả sai bắt đầu với bộ ký tự hợp lệ và độ dài tối đa. Tôi đã cố gắng (không thành công) để tạo ra một số nhìn xung quanh hoặc nhìn lại hoặc bất cứ điều gì để tìm kiếm sự lặp lại không hợp lệ của khoảng thời gian (.
) và gạch dưới (_
) không chắc chắn cách tiếp cận hoặc phương pháp nào để phân tích yêu cầu này thành giải pháp regex Là.
Có ai có thể hỗ trợ đề xuất/phương pháp thay thế hoặc hướng tôi đi đúng hướng không?
Bạn đã quên các chữ số trong regex của mình; Ngoài ra, bạn chỉ muốn cho phép chữ cái/chữ số ASCII? Bạn đang sử dụng công cụ regex nào (thông tin bắt buộc cho tất cả các câu hỏi về regex trên StackOverflow, bằng cách này)? –
Biểu thức chính quy vẫn là cách để thực hiện. Nếu bạn sử dụng chúng, tất cả các kiến thức cần thiết để phân tích chuỗi nằm bên trong regex. Nếu bạn không sử dụng chúng, kiến thức ở khắp nơi và bạn có một loạt các vòng lặp, tấn chuỗi hoạt động và hàng triệu trường hợp cạnh mà bạn có thể quên thực hiện và mã kết quả thậm chí còn lỗi hơn và khó đọc hơn. Đừng để giảng viên ngăn cản bạn, Nếu bạn không biết đủ về bất cứ điều gì, thật khó, nếu bạn biết đủ, thật dễ dàng. – escitalopram
Ah có tốt đốm tôi gõ rằng trong sai được cho là^[a-zA-Z0-9_.] Điều này là đủ tốt để đảm bảo tất cả các ký tự ASCII hợp lệ tuy nhiên tôi đang đấu tranh với yêu cầu # 4 mà không chia thành 2 biểu thức. Về công cụ Regex, tôi xác thực cả phía máy khách (Javascript) và phía máy chủ ASP.NET 4.5 – SpaceKat