我有一个使用.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.
我已经尝试过你们所有人建议的所有答案。但还是行不通。这不是我不读你所有的答案。
这是图片..
我想在第一次验证时,用户只能键入数字,但以非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 ..
还有其他办法吗?谢谢。
答案 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);
}
}