2014-09-25 79 views
1

我想創建一個強制用戶輸入「am」或「pm」的文本框,或者如果他們沒有完成並移動到另一個只有輸入的控件「a」或「p」會自動關閉。或者,也許一旦用戶輸入「a」或「p」,它會添加「m」。強制在文本框上的文本輸入爲am/pm

我想用正則表達式來匹配條目。我已經有一個可以檢查正則表達式的自定義文本框,但是我不確定如何構建它。

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

請問有人能幫我表達一下嗎?

+2

你爲什麼不使用選擇列表或單選按鈕? – 2014-09-25 00:31:57

+0

非常感謝,但在這種情況下,它不適用於DateTime選取器。 – Hank 2014-09-25 00:37:05

+0

如何將文本框格式化爲dd MMM yyyy hh:mm:ss tt因此,當用戶從日期選擇器中進行選擇時,AM PM將生成並將文本框與日期時間屬性綁定,以確保用戶始終輸入有效的日期時間值 – 2014-09-25 03:01:22

回答

2

如果你想檢查一個完整的字符串,你需要確保它匹配從開始到結束的模式。這就是你需要使用錨點的原因。無錨的模式可以像abcdPMefgh匹配的東西:

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

\A意味着開始字符串

\z表示字符串

注意捕捉括號是因爲結果沒用的結束你想要的是整場比賽。

如果您只需要從較大的字符串中提取子字符串「am」或「pm」,則@"\b[AaPp][Mm]\b"更合適。

的另一件事,你可以使用正則表達式選項,使圖案不區分大小寫和簡單的寫@"\b[ap]m\b"

+0

有趣的,在這種情況下,文本框只需要在上午或下午進行匹配。那麼這是否意味着\ A應始終在[]之前,\ z始終在[]之後? – Hank 2014-09-25 00:49:18

+0

因此,當我第一次輸入讓我們說「a」,並且我的匹配檢查發生在每個按鍵上時,它只有一個字符,它是不是試圖匹配獲得錯誤結果的開始和結束規則? – Hank 2014-09-25 00:53:37

+0

@Hank:如果你想檢查整個字符串的有效性,你需要在開始時使用'\ A'並在末尾使用'\ z'。輸入第一個字符時,模式與字符串不匹配。 – 2014-09-25 01:01:35