我需要以这种形式输入:
第一位数字总是0
总是第二个。或,
最多六位数,但只有数字不是字母或其他符号
而不是全部为零
private const string Pattern = @"^0(,|.)(?!0+$)+";
var regex = new Regex(Pattern, RegexOptions.IgnoreCase);
if (!regex.IsMatch(inputToCheck))
{...}
除了只有数字的条件外,这适用于所有条件。 此输入也应该被禁用:" 0,01a"," 0.01a1"," 0,01a0"
如何将正则表达式扩展到这种状态?
输入有效和无效的一些示例。
有效:
0,123456
0,01
0,010
0,2
无效:
1,123456
2,123456
0,0
0,00
0,000
a
a,1
0,01a
0,01a1
0,01a0
答案 0 :(得分:3)
我认为你正走在正确的轨道上。这是我的解决方案:
^0[,.](?!0+$)\d{1,6}$
这将确保第一个数字为零。然后它检查下一个字符是逗号还是点。然后,使用前瞻,它确保主题字符串的其余部分不完全为零。如果通过,则检查剩余的字符是否都是数字。
答案 1 :(得分:2)
你可以使用这样的正则表达式:
^0[.,][1-9]{0,6}$
当然,此正则表达式不允许在0
或,
之后.
。如果您想允许0
但限制以0
结尾,则可以执行以下操作:
^0[.,][0-9]{0,5}[1-9]$
你也可以将它缩短一点:
^0[.,]\d{0,5}[1-9]$
答案 2 :(得分:1)
试试这个表达
^^0(,|.)([0-9]{1,4}$)+
答案 3 :(得分:1)
您不应该使用正则表达式来解析数字,您可以通过将其验证为数字来实现。
CultureInfo culture = new CultureInfo("de-DE");
string[] inputs = new string[]{"0,123456",
"0,01",
"1,123456",
"0,0"};
foreach(var input in inputs)
{
double val;
if(Double.TryParse(input, NumberStyles.Number, culture, out val)
&& Math.Round(val, 6) == val
&& val != 0.0
&& (int)val == 0)
Console.WriteLine("{0} is valid", input);
else
Console.WriteLine("{0} is invalid", input);
}
输出
0,123456有效
0,01有效
1,123456无效
0,0无效