33

我有一个使用 .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..

还有其他方法吗?谢谢。

4

6 回答 6

43

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

必须以非零开头,只需将初始更改[0-9]*为 a [1-9][0-9]*。仅对于整数(如您添加的示例数据所示),这将是:

^[1-9][0-9]*$
于 2013-01-03T02:53:06.410 回答
23

要匹配以除零以外的任何数字开头的数字:

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

如果你也想匹配 0 :

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

如果您只想要一个零,请删除最后一个加号

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

^[1-9a-zA-Z][0-9a-zA-Z]*$
于 2013-01-03T02:55:58.483 回答
1

由于您的代码是 .NET,因此您不应使用正则表达式来解析 Integer。只需使用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*$

于 2013-01-03T02:53:28.050 回答
1

这对我来说最有效:

^(?!(0))[0-9]$
于 2021-09-21T09:24:41.953 回答
0

这是你想要的:

^(([1-9]\d*)|([0]{1}))(\.\d+)?$

它也接受像这些数字这样的小数:

423423.423423

0.4234

0
于 2021-09-01T13:13:18.460 回答
-1

有时,正则表达式甚至无法在某些浏览器中工作。因此这里有一个类似的逻辑:

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);
}
} 
于 2016-04-06T02:14:58.683 回答