C# 正则表达式只允许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

有人能帮我用正则表达式验证一个只接受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(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。