日期:2014-05-18  浏览次数:21210 次

正则表达式,判断大于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次或1次。

和7楼的解释,哪种是对的啊

------解决方案--------------------
方法很多。你和例子只是区别是否考虑正数前面可以包含正号。
当然例子的没错,如果实际情况是不包含符号的,你的也没错。当然还可以这样写

^\+?(?!0)\d+$
------解决方案--------------------
^\+?(?!0)\d+$ 更漂亮一些,但是当数据量比较大的时候^\+?[1-9][0-9]*$ 这个的效率应该会高一点
------解决方案--------------------
错了,应该是:^[+]?[1-9][0-9]*$