正则表达式部分验证表达式

时间:2015-09-23 09:32:09

标签: java regex validation

我目前正在使用Java构建Web应用程序,我是regex的新手。我有以下要求验证公式:

公式可以包含以下字符集:

  • 数字:0 - 9
  • Alpha:A - Z
  • 运营商:*,/,+, -
  • 分隔符:;

条件:

  • 公式必须以“T”开头
  • 字符“T”必须始终后跟数字或字母。
  • 分隔符必须始终后跟“T”。
  • 字符“M”必须始终跟随操作员。
  • 操作员必须始终跟一个数字

我有以下表达式,如下所示:

^(?!.*[*+/-]\D)(?!.*T\W)(?!.*[;:][^T])(?!.*M[^*+/-])[T][A-Z0-9 +/*;:-]*$

以下表达式符合上述有效的正则表达式:

TA123; T1 * 2 / 32M +

但我不知道如何将以下验证添加到上面的正则表达式中:

  • 操作员必须始终跟一个数字
  • 字符“T”必须始终后跟数字或字母。
  • 分隔符必须始终后跟“T”
  • 字符“M”必须始终跟随操作员。

上面的正则表达式对上述条件有效,部分只有下面的那个应该是无效的,但它是有效的,这是错误的:

下面的那个不应该作为运算符(*,/,+, - )必须始终跟一个数字,但在这种情况下它是有效的:

T4R*

下面的一个不应该工作,因为字符“T”必须始终跟一个数字或一个alpha,但在这种情况下它是有效的:

T4RT

下面的那个不应该作为分隔符(;)必须始终后跟“T”,但在这种情况下它是有效的:

T4;

下面的那个不应该工作,因为字符“M”必须始终跟随运算符,但在这种情况下它是有效的:

T4RTM

你好@vks,

将更改应用于reg表达式后,请在下面找到结果:

下面的那个不应该作为运算符(*,/,+, - )必须始终跟一个数字

它适用于字符,但不适用于数字,预期的数字是数字:

T4R * H无效

有效的T4R * 5

字符“T”必须始终后跟数字或字母:

T4RT按预期无效 T4RT5应该有效,但实际结果无效 T4R应该有效,但实际结果无效

分隔符(;)必须始终后跟“T”:

T4; T应该有效但实际结果无效  T4;按预期无效

字符“M”必须始终跟随操作员:

T4RTM +应该有效,但实际结果无效   T4RTM按预期无效

知道如何对正则表达式进行哪些更改以满足上述条件?

提前感谢您提供任何帮助

2 个答案:

答案 0 :(得分:0)

正则表达式是正确的。唯一可能失败的方法是输入后有newline。要解决这个问题,你可以使用

^(?!.*[TM*+/;:-]$)(?!.*[*+/-]\D)(?!.*T\W)(?!.*[;:][^T])(?!.*M[^*+/-])[T][A-Z0-9 +/*;:-]*$

参见演示。

https://regex101.com/r/sS2dM8/51

答案 1 :(得分:-1)

将任务分解成更小的部分,然后逐一解决

解决方案可能如下所示:

缺点:

  1. 性能略差
  2. 上升空间:

    1. 更易于阅读和理解
    2. 更易于维护和扩展
    3. 更容易测试