正则表达式,判断大于0的整数这样写对不对?
我看到教程是这样写
C# code
if (!Regex.IsMatch(txtNum.Text.Trim(), @"^\+?[1-9][0-9]*$"))
而我自己是这样写
C# code
if (!Regex.IsMatch(txtNum.Text.Trim(), @"^[1-9][0-9]*$"))
请问哪种写法是对的?
------解决方案--------------------两种唯一的区别就是 数字开始是否有加号而已
从正则的健壮性来讲,第一种更好一点
------解决方案--------------------^\+?(?!0)\d*$
也可试试这个
------解决方案--------------------该帖子于2012-02-12 21:43:58
------解决方案--------------------+ 重复一次或更多次
------解决方案--------------------+? 重复1次或更多次,但尽可能少重复
------解决方案--------------------\+?应该是说“+(正号)”出现0次或1次。
------解决方案--------------------不明白楼主为什么一定要用正则来实现这个功能?
既然已经到了C#里,用uint.TryParse不是更方便吗?(效率应该也更高)
uint t;
if (uint.TryParse("10.5", out t)) {
//是大于0整数
}
------解决方案--------------------if (!Regex.IsMatch(txtNum.Text.Trim(), @"^\+?[1-9][0-9]*$"))
教程上与楼主,差别只是对于前面带+号这样的数字是否匹配了。
比如“+5”,教程中的范例就会把它列为合法的的正整数,而楼主的就不会。只此而已。
------解决方案--------------------看了一下,其实正确答案上面的朋友都给了,我也只是多余又研究了一下而已。
按情况来说,教程上的应该更完善一些,建议楼主使用教程。
^\+?[1-9][0-9]*$
^ 从行头开始匹配
\+ 表示匹配加号
? 表示前面那个加号可有可无
[1-9] 表示第一个数字为1-9
[0-9]* 表示第二个数字为0-9,后面*号表示第二个数字可以为0-N个位数
$ 表示匹配字串的结束
------解决方案--------------------
------解决方案--------------------方法很多。你和例子只是区别是否考虑正数前面可以包含正号。
当然例子的没错,如果实际情况是不包含符号的,你的也没错。当然还可以这样写
^\+?(?!0)\d+$
------解决方案--------------------^\+?(?!0)\d+$ 更漂亮一些,但是当数据量比较大的时候^\+?[1-9][0-9]*$ 这个的效率应该会高一点
------解决方案--------------------错了,应该是:^[+]?[1-9][0-9]*$