2014-09-25 4 views
1

Я хотел бы создать текстовое поле, которое заставляет пользователя вводить «am» или «pm», или если они не заканчиваются и переходят на другой элемент управления, только что введенный «a» или «p» автоматически завершают его. Или, может быть, как только пользователь вводит «a» или «p», он добавляет в «m».Форсирование ввода текста в текстовом поле должно быть am/pm

Я думал об использовании регулярного выражения, чтобы как-то соответствовать записи. У меня уже есть пользовательское текстовое поле, которое может проверять регулярное выражение, однако я не уверен, как его построить.

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

Не могли бы помочь мне с выражением, пожалуйста?

+2

Почему вы не используете список выбора или радио кнопки? –

+0

Спасибо и справедливо, но это не подходит в этом случае, это для сборщика DateTime. – Hank

+0

как насчет создания текстового поля для dd MMM yyyy hh: mm: ss tt, поэтому, когда пользователь выбирает из набора даты, AM PM будет сгенерирован и привяжет текстовое поле к свойствам datetime, чтобы гарантировать, что они всегда будут вводить действительное значение datetime –

ответ

2

Если вы хотите проверить целую строку, вы должны быть уверены, что она соответствует шаблону от начала до конца. Именно по этой причине вам нужно использовать якоря. Без якорей ваш шаблон может соответствовать что-то вроде abcdPMefgh:

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

\A означает начало строки

\z означает конец строки

Заметим, что захват скобку бесполезны, так как результат вы хотите, чтобы весь матч.

Если вам нужно только извлечь подстроку «am» или «pm» из большей строки, более подходящим является @"\b[AaPp][Mm]\b".

Другой вещи, вы можете использовать регулярные выражения варианты, чтобы в случае шаблон нечувствительными и просто написать @"\b[ap]m\b"

+0

Интересно, в этом случае текстовое поле должно будет совпадать только с am или pm. Значит ли это, что \ A всегда должен предшествовать [], а \ z всегда следует за []? – Hank

+0

Итак, когда я впервые вхожу, давайте скажем «а», и моя проверка совпадения происходит при каждом нажатии клавиши, у нее есть только один символ, не пытается ли она соответствовать значению как начального, так и конечного правил, дающих ложный результат? – Hank

+0

@Hank: если вы хотите проверить правильность всей строки, вам нужно использовать '\ A' в начале и' \ z' в конце. Когда вы вводите первый символ, шаблон не соответствует строке. –

Смежные вопросы