How can I set a regular expression on WPF TextBox? I want the textbox to accept input in some predefined format. Is it possible?
Asked
Active
Viewed 2.2k times
6
-
2Hi, please have a look at this question's answer. It seems to be exactly what you need: http://stackoverflow.com/questions/1103765/wpf-textbox-how-to-define-some-restriction – andyp Nov 14 '09 at 16:02
2 Answers
8
You have several options:
- You can create a
ValidationRule
subclass (see below) and add it to your Binding's Validators property - You can set a
ValidationCallback
on your bound property, throw an exception if the value is wrong, and use this technique for easily showing validation errors - You can create an attached property that registers an event handler for the TextBox.TextChanged property and implement your own validation error notification mechanism
- You can use a normal TextBox with an TextBox_Changed handler in code behind
- You can handle PreviewKeyDown and PreviewTextInput from an attached property as shown here
- You can use a masked text box as mentioned by Jan
For arbitrary regexes I would generally use WPF's built-in validation features or do the validation on the bound property. For specific needs the PreviewKeyDown/PreviewTextInput or masked text box might be better.
Here is how you would create a ValidationRule subclass:
public class RegexValidationRule : ValidationRule
{
... // Declare Regex property and Message property
public override ValidationResult Validate(object value, CultureInfo cultureInfo)
{
if(Regex.IsMatch((string)value))
return ValidationResult.ValidResult;
else
return new ValidationResult(false, Message);
}
}
0
Either you can check at the changed event or you could use what's called a masked textbox.

Peter Mortensen
- 30,738
- 21
- 105
- 131

Daniel A. White
- 187,200
- 47
- 362
- 445
-
-
1See http://stackoverflow.com/questions/481059/where-can-i-find-a-free-masked-textbox-in-wpf – Jan Jongboom Nov 14 '09 at 16:02