C# 正则表达式只允许100到999999之间的数字
有人能帮我用正则表达式验证一个只接受100到999999之间数字的文本框吗 谢谢,C# 正则表达式只允许100到999999之间的数字,c#,regex,compact-framework,C#,Regex,Compact Framework,有人能帮我用正则表达式验证一个只接受100到999999之间数字的文本框吗 谢谢, 吕 您的需求转换为三到六位数,首先不是零。我记不起C#是否默认锚定了REs,所以我也把它们放进去了 ^[1-9][0-9]{2,5}$ ^[1-9][0-9]{2,5}$您的需求转换为三到六位数字,首先不是零。我记不起C#是否默认锚定了REs,所以我也把它们放进去了 ^[1-9][0-9]{2,5}$ ^[1-9][0-9]{2,5}$这不需要正则表达式 int n; if (!int.TryParse(text
吕 您的需求转换为三到六位数,首先不是零。我记不起C#是否默认锚定了REs,所以我也把它们放进去了 ^[1-9][0-9]{2,5}$
^[1-9][0-9]{2,5}$您的需求转换为三到六位数字,首先不是零。我记不起C#是否默认锚定了REs,所以我也把它们放进去了 ^[1-9][0-9]{2,5}$
^[1-9][0-9]{2,5}$这不需要正则表达式
int n;
if (!int.TryParse(textBox.Text.Trim(), out n) || n<100 || n>999999)
{
// Display error message: Out of range or not a number
}
你不需要正则表达式
int n;
if (!int.TryParse(textBox.Text.Trim(), out n) || n<100 || n>999999)
{
// Display error message: Out of range or not a number
}
一种简单的方法是使用正则表达式
^[1-9][0-9]{2,5}$
如果您希望允许前导零(但仍保持6位限制),则正则表达式将是
^(?=[0-9]{3,6}$)0*[1-9][0-9]{2,5}
最后一个可能需要一些解释:它首先使用正向前瞻[(?=)
]来确保整个输入是3到6位数字,然后确保它由任意数量的前导零和一个范围为100-99999的数字组成
然而,使用更适合任务的东西(可能是数字比较?)可能是个好主意。一个简单的方法是使用正则表达式
^[1-9][0-9]{2,5}$
如果您希望允许前导零(但仍保持6位限制),则正则表达式将是
^(?=[0-9]{3,6}$)0*[1-9][0-9]{2,5}
最后一个可能需要一些解释:它首先使用正向前瞻[(?=)
]来确保整个输入是3到6位数字,然后确保它由任意数量的前导零和一个范围为100-99999的数字组成
然而,使用更适合任务的东西(可能是数字比较?)可能是个好主意。您必须使用正则表达式吗?怎么样
int result;
if(Int.TryParse(string, out result) && result > 100 && result < 999999) {
//do whatever with result
}
else
{
//invalid input
}
int结果;
if(Int.TryParse(字符串,输出结果)&&result>100&&result<999999){
//不管结果如何
}
其他的
{
//无效输入
}
您必须使用正则表达式吗?怎么样
int result;
if(Int.TryParse(string, out result) && result > 100 && result < 999999) {
//do whatever with result
}
else
{
//invalid input
}
int结果;
if(Int.TryParse(字符串,输出结果)&&result>100&&result<999999){
//不管结果如何
}
其他的
{
//无效输入
}
您可以考虑的另一种方法
[1-9]\d{2,5}
您可以考虑的另一种方法
[1-9]\d{2,5}
为什么不改用一个控件来指定最小值和最大值?
而且它也只允许输入数字,为您节省了额外的验证,以确保可以输入任何非数字的内容
从示例中可以看出:
public void InstantiateMyNumericUpDown()
{
// Create and initialize a NumericUpDown control.
numericUpDown1 = new NumericUpDown();
// Dock the control to the top of the form.
numericUpDown1.Dock = System.Windows.Forms.DockStyle.Top;
// Set the Minimum, Maximum, and initial Value.
numericUpDown1.Value = 100;
numericUpDown1.Maximum = 999999;
numericUpDown1.Minimum = 100;
// Add the NumericUpDown to the Form.
Controls.Add(numericUpDown1);
}
为什么不使用一个控件来指定最小值和最大值呢?
而且它也只允许输入数字,为您节省了额外的验证,以确保可以输入任何非数字的内容
从示例中可以看出:
public void InstantiateMyNumericUpDown()
{
// Create and initialize a NumericUpDown control.
numericUpDown1 = new NumericUpDown();
// Dock the control to the top of the form.
numericUpDown1.Dock = System.Windows.Forms.DockStyle.Top;
// Set the Minimum, Maximum, and initial Value.
numericUpDown1.Value = 100;
numericUpDown1.Maximum = 999999;
numericUpDown1.Minimum = 100;
// Add the NumericUpDown to the Form.
Controls.Add(numericUpDown1);
}
可能接受前导零:
^0*[1-9]\d{2,5}$
可能接受前导零:
^0*[1-9]\d{2,5}$
这将实现以下目的:
^[1-9]\d{2,5}$
这将实现以下目的:
^[1-9]\d{2,5}$
以一个或多个零开头的数字(例如00222)是否为有效输入?您使用的是哪种UI技术?其中一些允许在其模型上使用范围属性并自动验证。以一个或多个零开头的数字(例如00222)是否为有效输入?您使用的是哪种UI技术?其中一些允许在模型上使用范围属性并自动验证。最好使用REs以外的东西来表示。我知道这不处理前导零。对于那些用户不是程序员的用户输入,不允许前导零正是正确的做法。为什么你认为不允许前导零是“正确的事情”?@Dour:因为用户——普通用户——在现实生活中根本不会键入前导零。如果有一个前导零,很可能是因为他们在打字时出错了。我观察过它们,它们是如何工作和思考的。最好用REs以外的东西来表达。我知道这不处理前导零。对于那些用户不是程序员的用户输入,不允许前导零正是正确的做法。为什么你认为不允许前导零是“正确的事情”?@Dour:因为用户——普通用户——在现实生活中根本不会键入前导零。如果有一个前导零,很可能是因为他们在打字时出错了。我观察过它们,它们就是这样工作和思考的。允许前导零吗?如果不是,这个解决方案是不完整的。@mob:我有用户意识。当我被要求验证用户输入时,我不会拒绝0100。用户会回复愚蠢的@#计算机。她是对的@serge我不能使用int.TryParse(),因为我正在windows mobile CF应用程序中使用它。请改用int.Parse()。但是捕获异常。是否允许前导零?如果不是,这个解决方案是不完整的。@mob:我有用户意识。当我被要求验证用户输入时,我不会拒绝0100。用户会回复愚蠢的@#计算机。她是对的@serge我不能使用int.TryParse(),因为我正在windows mobile CF应用程序中使用它。请改用int.Parse()。但是有例外。@Soniic:对不起,你能解释一下吗?@Jon,你的第二个表达式无效。你想要的东西更像是
^0*[1-9]\d{2,5}\z
@CanSpice为什么100不会被^[0-9]{3,6}$
接受?@Qtax:我太草率了,对不起。不过,目前的答案非常准确。@CanSpice,我的正则表达式不会做任何你说的事情,而且它工作得很好。看来你错过了或不知道\d
@soniic:对不起,你能解释一下吗?@Jon,你的第二个表达式无效。你想要的东西更像是^0*[1-9]\d{2,5}\z
@CanSpice为什么100不会被^[0-9]{3,6}$
接受?@Qtax:我太草率了,对不起。不过,目前的答案非常准确。@CanSpice,我的正则表达式不会做任何你说的事情,而且它工作得很好。似乎您错过了或不知道\d
的含义。布赖恩,我不能使用int。