Я знаю, что это не совсем тот ответ, который вы ищете, но я всегда смотрю, могу ли я поместить такие проверки в CustomValidator с помощью серверного метода OnValidate.
Регулярные выражения забавны и хороши для головоломок, но всегда есть люди, которые не понимают их и не поймут, что вы делаете.
Всегда старайтесь ошибиться с точки зрения читабельности и простоты понимания, особенно если вы предвидите, что вы не будете единственным, кто поддерживает решение.
Хотя это может показаться слишком многословным, я считаю, что это решение с наименьшим горем в долгосрочной перспективе.
Я бы использовал CustomValidator, как это на странице ASP:
<asp:CustomValidator ID="rev1" runat="server"
ValidateEmptyText="true"
ControlToValidate="TextBox1"
SetFocusOnError="True"
Display="Dynamic"
OnServerValidate="validatePasswordField"
ErrorMessage="Password must be 6 characters long"/>
И в коде позади я поместил бы что-то вроде этого:
private const int EMPTY_PASSWORD_LENGTH = 0;
private const int MIN_PASSWORD_LENGTH = 6;
private const int MAX_PASSWORD_LENGTH = 6;
protected void validatePasswordField(object source,
ServerValidateEventArgs args) {
if (source == null) return;
string candidatePassword = TextBox1.Text;
args.IsValid = isValidPasswordText(candidatePassword);
}
private bool isValidPasswordText(string candidate) {
return candidate.Length == EMPTY_PASSWORD_LENGTH
|| (candidate.Length >= MIN_PASSWORD_LENGTH
&& candidate.Length <= MAX_PASSWORD_LENGTH);
}
Ну, на самом деле я бы вытащил определение isValidPasswordText (string) в класс бизнес-уровня, но это скорее архитектурное решение.