我有以下正则表达式只验证整数,^ \ $?\ d {0,10}(。(\ d {0,2}))?$虽然它正确地将12标识为有效整数,但它也验证12美元作为有效的。如果,我从正则表达式中删除了第一个$,它也没有。
由于
答案 0 :(得分:0)
using System;
using System.Text.RegularExpressions;
Console.WriteLine(Regex.IsMatch("1313123", @"^\d+$")); // true
假设我们想验证一个简单的整数。
如果我们还想为一个或多个文化或其他数字约定包含数千个分组结构,那将会更复杂。考虑以下情况:
10,000
10 000
100,00
100,000
-10
+10
要了解挑战,请参阅NumberFormatInfo
properties here.
如果我们需要处理特定于文化的数字约定,那么最好利用Int64.TryParse()
方法而不是使用Regex。
它是live here.完整列表of NumberStyles is here。我们可以添加/删除各种NumberStyles
,直到找到我们想要的集合。
using System;
using System.Text.RegularExpressions;
using System.Globalization;
public class Program
{
public static void Main()
{
Console.WriteLine(IsIntegerRegex("")); // false
Console.WriteLine(IsIntegerRegex("2342342")); // true
Console.WriteLine(IsInteger("1231231.12")); // false
Console.WriteLine(IsInteger("1231231")); // true
Console.WriteLine(IsInteger("1,231,231")); // true
}
private static bool IsIntegerRegex(string value)
{
const string regex = @"^\d+$";
return Regex.IsMatch(value, regex);
}
private static bool IsInteger(string value)
{
var culture = CultureInfo.CurrentCulture;
const NumberStyles style =
// NumberStyles.AllowDecimalPoint |
// NumberStyles.AllowTrailingWhite |
// NumberStyles.AllowLeadingWhite |
// NumberStyles.AllowLeadingSign |
NumberStyles.AllowThousands;
return Int64.TryParse(value, style, culture, out _);
}
}