我希望接受(6个字符长或无字符)的值。
这是一个更新表格。如果输入密码,我想强制使用6个字符。如果没有,我想忽略该字段。
这是一个REGEX,它让我获得6个char部分,还有任何关于处理空的帮助吗?
<asp:RegularExpressionValidator id="rev1" runat="server" SetFocusOnError="True"
ErrorMessage="Password must be 6 characters long" Display="Dynamic"
ControlToValidate="TextBox1" ValidationExpression="^[a-zA-Z0-9]{6}$">
答案 0 :(得分:2)
^([a-zA-Z0-9]{6}|)$
你甚至可以将它缩短为
^(\w{6}|)$
\ w表示'单词字符'
答案 1 :(得分:2)
不确定我的问题是否正确但是RegularExpressionValidator不验证空输入。换句话说,如果TextBox1为空,则Page.IsValid将为true。
答案 2 :(得分:1)
可能的解决方案:
^[a-zA-Z0-9]{6}$|^$
只允许6个字符,或者为空,只允许其他字符。
答案 3 :(得分:0)
我知道这不是您正在寻找的答案,但我总是看看是否可以使用服务器端方法OnValidate将此类验证放入CustomValidator。
正则表达式很有趣,非常适合益智游戏,但总有人不会得到它们,也不会理解你在做什么。
总是试图在可读性和易于理解方面犯错,特别是如果你预见到你不会是维持解决方案的人。
虽然这看起来过于冗长,但我发现这是一种从长远来看最不悲伤的解决方案。
我会在ASP页面中使用这样的CustomValidator:
<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)定义拉出到业务层类中,但这更像是一个架构决策。
答案 4 :(得分:0)
我认为如果您只想使用验证控件来验证长度和空字符串,您应该使用customervalidator。
protected void CustomValidator1_ServerValidate(object source, ServerValidateEventArgs args)
{
string txtpassword = txtboxPassword.Text;
if (txtpassword == string.Empty || txtpassword.Length == 6)
{
args.IsValid = true;
}
else
{
args.IsValid = false;
}
}
protected void Button1_Click(object sender, EventArgs e)
{
if (Page.IsValid)
{
Response.Redirect("Next.aspx");
}
}