正则表达式只接受数字。第一个字符不能为0

时间:2013-01-03 02:51:35

标签: regex

我有一个使用.NET创建的文本框。

通过使用该文本框,用户只能键入数字。但不是从0开始,以1-9开头。在第一个字符的1-9中的用户键之后,用户可以键入0。

Regex reg = null;
reg = new System.Text.RegularExpressions.Regex("^[1-9][0-9]*$")
return reg.IsMatch(str);

这是我的正则表达式。通过使用我不能键入1-9。但只有0和字母表。 但如果我使用^ [1-9]我可以键入数字,但不能键入0.

我已经尝试过你们所有人建议的所有答案。但还是行不通。这不是我不读你所有的答案。

这是图片..

enter image description here

我想在第一次验证时,用户只能键入数字,但以非0或字母但1-9的值开头。在第一个字符之后,用户只能键入0-9。

我确实使用了Int.TryParse,但是在按下按钮进行处理后我使用了它。

reg = new System.Text.RegularExpressions.Regex("^[^0-9]");

正则表达式只接受0到9之间的数字。

reg = new System.Text.RegularExpressions.Regex("^[^1-9]");

正则表达式只接受1到9之间的数字。

如何为第二个字符的正则表达式添加更多表达式,直到只接受数字0-9的其余字符?

顺便说一句,我不在乎0.99,因为在这里,价格是固定的。不是0.99或0.123 ..

还有其他办法吗?谢谢。

4 个答案:

答案 0 :(得分:23)

如果您正在查看类似价格的内容,则需要考虑0.99可能完全有效。对于类似的东西,我只是从一个非复杂的^[0-9]*(\.[0-9]{0,2})?$开始(同样可能有边缘情况可能使它更复杂,如小数点后的三位数等等)和允许前导零,因为它们无论如何都不会“损坏”该值。

必须以非零开头,只需将初始[0-9]*更改为[1-9][0-9]*即可。仅对于整数(似乎由您添加的样本数据表示),即:

^[1-9][0-9]*$

答案 1 :(得分:13)

匹配以任何数字开头的数字,但为零:

^[1-9][0-9]*$

如果你想匹配0:

^([1-9][0-9]*)|([0]+)$

如果只需要一个零

,请删除最后一个加号

要在第一个非零之后允许任何字母数字:

^[1-9a-zA-Z][0-9a-zA-Z]*$

答案 2 :(得分:1)

由于您的代码是.NET,因此不应使用正则表达式来解析整数。只需使用UInt32.TryParse()方法

即可
uint num=0;
if(UInt32.TryParse(str, out num)){
    Console.WriteLine("Converted '{0}' to {1}.", str, num);   
}else{
    Console.WriteLine("conversion of '{0}' failed.", value==null? "": value);
}

旧答案

这个简单的正则表达式将^[1-9]\d*$

答案 3 :(得分:0)

有时候正则表达式甚至不能在某些浏览器中运行。因此,这是一个类似的逻辑:

function name(e)
{

var key = window.event ? e.keyCode : e.which;
var keychar = String.fromCharCode(key);
var reg = /\d/;

var textField=document.getElementById("ID").value;

if(key==48)
{
if(textField==""||textField==null)
{
e.preventDefault();
return false;
}

else{
return true;
}
}

else
{
var reg = /\d/;
return reg.test(keychar);
}
}