Ruby “不完整字符串的正则表达式匹配”;当您键入“时”;

Ruby “不完整字符串的正则表达式匹配”;当您键入“时”;,ruby,regex,Ruby,Regex,当用户输入字符串时,匹配字符串的最佳实践是什么 我想以这个用于匹配时间的正则表达式为例: /(\d\d?)(:\d\d?)\s?(上午|下午)/匹配12:30上午,9下午,23:00非常好 只有在用户输入该字符串时,您希望提供反馈时,才会变得棘手。 12:不匹配,也不会12:30 p 我的解决方案是使用第二个独立的正则表达式来匹配包含所有输入可能性的不完整字符串: /(\d\d?)(:\d\d?:)?\s?(| a | p | am | pm)?/将匹配12:和12:30 p很好 有没有更好、更

当用户输入字符串时,匹配字符串的最佳实践是什么

我想以这个用于匹配时间的正则表达式为例:
/(\d\d?)(:\d\d?)\s?(上午|下午)/
匹配
12:30上午
9下午
23:00
非常好

只有在用户输入该字符串时,您希望提供反馈时,才会变得棘手。
12:
不匹配,也不会
12:30 p

我的解决方案是使用第二个独立的正则表达式来匹配包含所有输入可能性的不完整字符串:
/(\d\d?)(:\d\d?:)?\s?(| a | p | am | pm)?/
将匹配
12:
12:30 p
很好


有没有更好、更优雅的方法可以做到这一点?

EWW。对时间使用2个文本字段,并从am/pm中选择,以便您可以独立验证它们。您当前的示例将接受99:99pm作为有效输入。谢谢您的建议,但附加验证是独立完成的,附加输入字段不是选项。@TomDunning此问题可以概括为电话号码、信用卡号码、日期、,因此,除了格式化时间之外,一般问题也很有趣。我知道这已经很久了,但是您的正则表达式可以简化为
(\d\d?(:\d{0,2})?\s?([ap]m?