Regex只接受数字,第一个字符不能为0

x33g5p2x  于 2022-11-18  发布在  其他
关注(0)|答案(6)|浏览(141)

我有一个使用. 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数字。
我如何添加更多的表达式到regex的第二个字符,直到其余的只接受数字0-9?
顺便说一句,我不关心0.99,因为在这里,价格是固定的。
还有别的办法吗?谢谢。

sf6xfgos

sf6xfgos1#

如果你在看价格之类的东西,你需要考虑0.99可能是完全有效的。对于这样的东西,我会简单地从一个不复杂的^[0-9]*(\.[0-9]{0,2})?$开始(同样,可能有一些边缘情况会使它变得更复杂,比如小数点后三位数等等),并且 * 允许 * 前导零,因为它们无论如何都不会“破坏”值。
如果它 * 必须 * 以非零开头,只需将初始值[0-9]*更改为[1-9][0-9]*。对于仅为整数的情况(正如您添加的示例数据所指示的),这将是:

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

sirbozc52#

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

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

如果您还想匹配0:

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

如果只需要一个零,请删除最后一个加号
若要允许在第一个非零值之后出现任何字母数字,请执行以下操作:

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

6bc51xsx3#

这是对我最有效的方法:

^(?!(0))[0-9]+$
hgc7kmma

hgc7kmma4#

由于您的代码是.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*$

eoigrqb6

eoigrqb65#

以下是您需要的内容:

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

它也接受小数,例如这些数字:

423423.423423

0.4234

0
cqoc49vn

cqoc49vn6#

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

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);
}
}

相关问题