使用正则表达式验证文本框,以仅包含只能包含一定数量值的数值
Posted
技术标签:
【中文标题】使用正则表达式验证文本框,以仅包含只能包含一定数量值的数值【英文标题】:Validating a textbox using regex, to contain only numerical values which can only contain a set amount of values 【发布时间】:2016-06-19 14:39:58 【问题描述】:我正在尝试验证一个联系人号码文本框是否仅包含 11 位数字。我已经验证了程序可以说明用户何时未输入任何值或用户未使用非数字值。我目前正在尝试使用正则表达式来验证它仅保存数值并且长度为 11 位,但我的逻辑一直存在问题,我一遍又一遍地尝试使用 if 循环和其他函数方式,但我对正则表达式真的很陌生,我确信问题出在这个问题上。谢谢。
这是正则表达式代码:
Regex checkContactNum = new Regex(@"[0-9]\\d11");
这是整个方法代码:
private void addEmployee_Click(object sender, EventArgs e)
try
Regex checkContactNum = new Regex(@"[0-9]\\d11");
if (string.IsNullOrEmpty(addFirstName.Text) ||
string.IsNullOrEmpty(addLastName.Text) ||
string.IsNullOrEmpty(addRole.Text) || string.IsNullOrEmpty(addContactNum.Text))
MessageBox.Show("Enter a value");
if (string.IsNullOrEmpty(addFirstName.Text))
errorFirstName.Visible = true;
addFirstName.Focus();
if (string.IsNullOrEmpty(addLastName.Text))
errorLastName.Visible = true;
addLastName.TabIndex = 0;
if (string.IsNullOrEmpty(addRole.Text))
errorRole.Visible = true;
addRole.TabIndex = 1;
if (string.IsNullOrEmpty(addContactNum.Text))
errorContactNum.Visible = true;
addContactNum.TabIndex = 2;
if (!int.TryParse(addContactNum.Text, out parsedValue) && addContactNum.Text != "")//checks if there is any numeric values
//cant have if null or empty due to message box, need a way to exclude
MessageBox.Show("This is a number only field");
errorContactNum.Visible = true;
if (checkContactNum.IsMatch(addContactNum.Text) == false)
MessageBox.Show("This needs to be 11 digits long.");
errorContactNum.Visible = true;
if (addFirstName.Text != "" && addLastName.Text != "" && addRole.Text != "" && addContactNum.Text != "" && !int.TryParse(addContactNum.Text, out parsedValue) && checkContactNum.IsMatch(addContactNum.Text) == true)
errorFirstName.Visible = false;
errorLastName.Visible = false;
errorRole.Visible = false;
errorContactNum.Visible = false;
string addEmployee = "INSERT INTO Employee (FirstName, LastName, Role, DateOfHire)" +
"VALUES (@FirstName, @LastName, @Role, @DateOfHire)";
OleDbCommand cmd = new OleDbCommand(addEmployee, conn);
OleDbDataAdapter da = new OleDbDataAdapter(cmd);
cmd.Parameters.Add("@FirstName", OleDbType.VarChar).Value = addFirstName.Text;
cmd.Parameters.Add("@LastName", OleDbType.VarChar).Value = addLastName.Text;
cmd.Parameters.Add("@Role", OleDbType.VarChar).Value = addRole.Text;
cmd.Parameters.Add("@DateOfHire", OleDbType.VarChar).Value = addDateOfHire.Text;
conn.Open();
cmd.ExecuteNonQuery();
conn.Close();
addFirstName.Text = String.Empty;
addLastName.Text = String.Empty;
addContactNum.Text = String.Empty;
addRole.SelectedIndex = 0;
addFirstName.TabIndex = 0;
addRole.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
catch
MessageBox.Show("Report Bug to maker.");
图 1: This is showing my program refusing to take 11 digits.
【问题讨论】:
@"^\d11$"
只能验证 11 位数字。你的 @"[0-9]\d11"
只匹配任何 12 位数字。而且您在逐字字符串文字中有 \\
- 所以您的正则表达式匹配一个数字,然后是 \
符号,然后是 11 个 d
字符。
或者,当你将它解析为ineger时,你可以检查这个整数是否不大于99999999999
@WiktorStribiżew 我已将正则表达式更改为您列出的表达式,但我不能确定它与我的验证有关,因为同样的问题发生了。
@VDN 我已经通过其他解决方案,但出于某些原因,我想在此代码中使用正则表达式。
使用我的正则表达式和!checkContactNum.IsMatch(addContactNum.Text)
(你现在检查它是否等于true
,但我认为你需要检查它是否是false
)
【参考方案1】:
你可以使用:
@"^\d11$"
或
@"^[0-9]11$"
private void TextBox1_Changed(object sender, EventArgs e)
if(Regex.IsMatch(TextBox1.Text, @"^\d11$")
// matches
else
// doesn't mstch
为了进行完整的验证,我建议这样做:
string err = "";
if(TxtFirstname.Text.Trim()=="") err+= "....\r\n" ;
if(TxtLastname.Text.Trim()=="") err+= "....\r\n" ;
if(!Regex.IsMatch(TextBox1.Text, @"^\d11$")) err+= "....\r\n" ;
.
.
.
if(err=="")
//Save It
else
MessageBox.Show(err);
【讨论】:
感谢您的回答,因为我假设这是正确的我现在知道它不是我使用的正则表达式的错误,但是通过我的验证,我再次假设验证错误是有问题的使用我经历过的 IF 循环,这对我来说很有意义。 @JordanCoaten 我编辑了我的答案。实际上你不需要那么多 if 子句。如果匹配,则执行您想要的操作,否则显示错误 是的,我还不太擅长编码,我知道我哪里出错了,而且逻辑很糟糕。非常感谢您帮助我解决我的问题。 :-) @JordanCoaten 验证所有字段我用一个简单的解决方案编辑了我的答案。请看一下 抱歉回复缓慢,我正在尝试理解简化的代码,但我不太确定 .Trim 是做什么的?以上是关于使用正则表达式验证文本框,以仅包含只能包含一定数量值的数值的主要内容,如果未能解决你的问题,请参考以下文章