6

How can I set a regular expression on WPF TextBox? I want the textbox to accept input in some predefined format. Is it possible?

Dave Clemmer
  • 3,741
  • 12
  • 49
  • 72
viky
  • 17,275
  • 13
  • 71
  • 90
  • 2
    Hi, 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 Answers2

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);
  }
}
Community
  • 1
  • 1
Ray Burns
  • 62,163
  • 12
  • 140
  • 141
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