【问题标题】:Forcing text entry on textbox to be am/pm强制文本框上的文本输入为 am/pm
【发布时间】:2014-09-25 00:27:33
【问题描述】:

我想创建一个文本框,强制用户输入“am”或“pm”,或者如果他们没有完成并移动到另一个只输入“a”或“p”的控件自动完成它关了。或者,一旦用户输入“a”或“p”,它就会添加到“m”中。

我正在考虑使用正则表达式以某种方式匹配条目。我已经有一个可以检查正则表达式的自定义文本框,但是我不确定如何构造它。

RegularExpression="([AaPp][Mm])"

请帮我看看这个表达方式吗?

【问题讨论】:

  • 为什么不使用选择列表或单选按钮?
  • 谢谢,很公平,但在这种情况下不合适,它用于日期时间选择器。
  • 如何将文本框格式化为 dd MMM yyyy hh:mm:ss tt 所以当用户从日期选择器中选择时,将生成 AM PM 并将文本框与日期时间属性绑定,以确保用户始终输入一个有效的日期时间值

标签: c# regex wpf


【解决方案1】:

如果你想检查整个字符串,你需要确保它从头到尾都匹配模式。这就是您需要使用锚点的原因。如果没有锚,您的模式可能会匹配 abcdPMefgh:

@"\A[AaPp][Mm]\z"

\A 表示字符串的开始

\z 表示字符串结束

请注意,捕获括号是无用的,因为您想要的结果是整个匹配项。

如果只需要从较大的字符串中提取子字符串“am”或“pm”,@"\b[AaPp][Mm]\b"更合适。

另外,您可以使用正则表达式选项使模式不区分大小写,只需编写@"\b[ap]m\b"

【讨论】:

  • 有趣,在这种情况下,文本框只需要在上午或下午匹配。那么这是否意味着 \A 应该总是在 [] 之前,而 \z 总是在 [] 之后?
  • 所以当我第一次输入时让我们说“a”并且我的匹配检查发生在每次按键时,它只有一个字符,它不会尝试匹配开始和结束规则给出的错误结果?
  • @Hank:如果你想检查整个字符串的有效性,你需要在开头使用\A,在结尾使用\z。当您输入第一个字符时,模式与字符串不匹配。
猜你喜欢
  • 2011-01-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-09-17
  • 2020-10-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多