When word lists are processed a regular expression is built in order to quickly traverse the lists. The regular expression is built using a number of builders which create various parts of the regular expression. One for checking the password itself, and another for testing the password against the list but modified by adding a numeric suffix. You can add your own by creating your own class derived from WordListRegExBuilder
and then adding it to the WordListProcessOptions
.
The WordListRegExBuilder
is an abstract base class and demands that the GetRegularExpression
method is implemented in any concrete derived class. It also has a method called RegExEncode
which takes a string and encodes it for use in a regular expression, escaping out all the special symbols used by the regular expression engine.
For example, say you want to validate the password against the list, but check also for a numeric prefix you can create a class to build that part of the regular expression. That class would look something like this:
using Xander.PasswordValidator; namespace Xander.Demo.PasswordValidator.Web.Mvc3.Helpers { public class NumericPrefixBuilder : WordListRegExBuilder { public override string GetRegularExpression(string password) { return "[0-9]" + RegExEncode(password); } } }
And to use this in the validator, add it to the settings like this:
var settings = new PasswordValidationSettings(); settings.WordListProcessOptions.CustomBuilders.Add(typeof(NumericPrefixBuilder));
The Validator will create a new instance of your class and run the GetRegularExpression
method. It will then incorporate that in to the regular expression that it is building and test word lists using it.