2017-07-19 15 views
5

Rất nhiều câu hỏi khác đưa ra câu trả lời cho các biểu thức regex mà lần hoàn thành chỉ cho phép đầy đủ như this: ^([0-9]|0[0-9]|1[0-9]|2[0-3]):[0-5][0-9]$Regex để cho phép người dùng gõ vào một thời gian - C#

Nhưng điều này là không sử dụng trong một sự kiện Textbox.TextChanged vì trong khi gõ 15:45 hộp văn bản sẽ chứa 15: không khớp với biểu thức ở trên.

Có cách nào dễ dàng để cho phép khớp một phần biểu thức Regex để đảm bảo thời gian nhập một nửa vẫn được chuyển hoặc tôi có phải chia biểu thức thành các phần của nó được tách ra bằng or s, như this?

+3

Bạn đang tìm kiếm 'MaskedTextBox'? –

+2

Bạn có thể điều chỉnh mẫu theo cách thủ công để sử dụng các nhóm tùy chọn, như https://regex101.com/r/BYpaYS/1 –

+0

Điều đó hoàn hảo @ WiktorStribiżew - nếu bạn đăng nó như một câu trả lời, tôi sẽ chấp nhận nó? –

Trả lời

3

Bạn có thể điều chỉnh thủ công các mẫu như vậy để cho phép so khớp một phần. Một điều cần nhớ là chúng chỉ tốt cho việc xác thực trực tiếp , không phải xác thực cuối cùng. Để thực hiện xác nhận cuối cùng, bạn cần sử dụng một mẫu hoàn chỉnh không có các phần tùy chọn (hoặc chỉ các phần tùy chọn bắt buộc).

Vì vậy, kỹ thuật này bao gồm việc sử dụng tùy chọn lồng nhau non-capturing groups, như (?:...(?:...)?)?.

^(?:(?:[01]?[0-9]|2[0-3])(?::(?:[0-5][0-9]?)?)?)?$ 

Xem regex demo

Chi tiết:

  • ^ - khởi đầu của chuỗi
  • (?: - khởi đầu của một tổ chức phi chụp tùy chọn
    • (?: - khởi đầu của một tùy chọn nhóm phi chụp
      • [01]?[0-9] - một tùy chọn 0 hoặc 1 và sau đó bất kỳ 1 chữ số
      • | - hoặc
      • 2[0-3]-2 và sau đó một chữ số 0-3
    • ) - kết thúc nhóm không bắt buộc tùy chọn
  • (?: - khởi đầu của một tùy chọn nhóm phi chụp
    • : - một dấu hai chấm
    • (?: - khởi đầu của một tùy chọn không bắt nhóm
      • [0-5][0-9]? - một chữ số 0-5 và sau đó bất kỳ chữ số tùy chọn nào
    • )? - cuối một tùy chọn nhóm phi chụp
    • )? - cuối một tùy chọn không bắt nhóm
  • )? - cuối một tùy chọn không bắt nhóm
  • $ - cuối chuỗi.
Các vấn đề liên quan