正则表达式只匹配这些情况

时间:2015-06-25 14:06:50

标签: c# regex

我在c#中有一个正则表达式,只有当输入具有所需的模式时才返回IsMatch = true但实际上如果某些字符匹配则返回true ...正确的正则表达式怎么样?

Regex reg = new Regex(@"[0-9 \-+]"); //accept only numbers, spaces, minus character and plus character

string formularight="1123 - 4432+32124";//its correct

bool validformat=reg.IsMatch(formularight)) //returns true, ok

string formulawrong="1123a - 4432+32124"; //it has one letter ismatch should be false...

validformat=reg.IsMatch(formulawrong)) //returns true, not ok

我稍后会检查每个号码在下一个号码之前是否加上减号或加号,但是如果它可以包含在正则表达式验证中......

我检查了其他正则表达式问题,然后有人建议我使用数据表来计算()表达式或使用一些计算器逻辑,请知道在这种情况下数字被用作字段名称,我将使用它来获取一些值数据库本身不是数值。所以我在解析公式之前只需要正则表达式验证。感谢

Valid examples for regex:
11123
112 - 1121
112-1121
1221111+554-111135678
44332-54-114

Invalid examples (letters present, not a + or - between numbers,...):
112 -
6543e
112 1121
6543e + 4432
-7632

3 个答案:

答案 0 :(得分:2)

您的Regular Expression找到了多个匹配项,因为您没有强制它匹配整个输入。

通过使用以下锚点,将强制检查整个输入。

  • ^ - 开始
  • $ - 结束

<强>正则表达式:

^[0-9 \-+]*$

Regexr: http://regexr.com/3b97l

答案 1 :(得分:1)

你应该在正则表达式中开始和结束锚点:

Regex reg = new Regex(@"^[0-9 +-]+$");

确保整个输入匹配给定的字符集。

isMatch Reference

答案 2 :(得分:1)

怎么样:

^\d+(?:\s*[+-]\s*\d+)*$

这适用于有效和无效的示例。

为了匹配括号中的数字:

^\[?\d+\]?(?:\s*[+-]\s*\[?\d+\]?)*$
相关问题