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

Java 正则表达式部分验证表达式,java,regex,validation,Java,Regex,Validation,我目前正在用Java构建web应用程序,而且我对regex还不熟悉。我对验证公式有以下要求: 公式可以包含以下字符集: 数字:0-9 α:A-Z 运算符:*,/,+- 分隔符: 条件: 公式必须以“T”开头 字符“T”后面必须始终跟一个数字或字母 分隔符后面必须始终跟有“T” 字符“M”后面必须始终跟有运算符 运算符后面必须始终跟一个数字 我有如下表达式,如下所示: ^(?!.*[*+/-]\D)(?!.*T\W)(?!.*[;:][^T])(?!.*M[^*+/-])[T][A-Z0-

我目前正在用Java构建web应用程序,而且我对regex还不熟悉。我对验证公式有以下要求:

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

  • 数字:0-9
  • α:A-Z
  • 运算符:*,/,+-
  • 分隔符:
条件:

  • 公式必须以“T”开头
  • 字符“T”后面必须始终跟一个数字或字母
  • 分隔符后面必须始终跟有“T”
  • 字符“M”后面必须始终跟有运算符
  • 运算符后面必须始终跟一个数字
我有如下表达式,如下所示:

^(?!.*[*+/-]\D)(?!.*T\W)(?!.*[;:][^T])(?!.*M[^*+/-])[T][A-Z0-9 +/*;:-]*$
以下表达式与上述有效的正则表达式匹配:

T4R*
T4RT
T4;
T4RTM
TA123;T1*2/32米+

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

  • 运算符后面必须始终跟一个数字
  • 字符“T”后面必须始终跟一个数字或字母
  • 分隔符后面必须始终跟有“T”
  • 字符“M”后面必须始终跟有运算符
上面的正则表达式部分有效上述条件只有下面的正则表达式无效,但它是有效的,这是错误的:

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

T4R*
T4RT
T4;
T4RTM
以下字符不应起作用,因为字符“T”后面必须始终跟一个数字或字母,但在这种情况下它是有效的:

T4R*
T4RT
T4;
T4RTM
下面的一个不应用作分隔符(;)必须始终后跟“T”,但在这种情况下它是有效的:

T4R*
T4RT
T4;
T4RTM
以下字符不应起作用,因为字符“M”后面必须始终跟有运算符,但在这种情况下,它是有效的:

T4R*
T4RT
T4;
T4RTM
你好@vks

将更改应用于reg表达式后,请查找以下结果:

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

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

无效的T4R*H

有效T4R*5

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

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

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

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

字符“M”后面必须始终有一个运算符:

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

你知道需要对正则表达式做什么更改才能满足上述条件吗


提前感谢您的帮助

将任务分解为若干小部分,并逐一解决

解决方案可能如下所示:

  • 检查
    /^[0-9A-Z\*\/\+\-\;]*$/
  • 检查
    /^T.*$/
    (公式必须以“T”开头)
  • 检查
    /^.*T(?[0-9A-Z]).$/
    是否不匹配(如果
    T
    后面没有数字或字母,则匹配)
  • 检查
    /^.*;(?!T)。*$/
    不匹配(如果分隔符后面没有
    T
    ,则它将匹配)
  • 检查
    /^.*M(?![\*\/\+\-]).$/
    是否不匹配(如果
    M
    后面没有运算符,则匹配)
  • 检查
    /^.[\*\/\+\-](?!\d)。*$/
    是否不匹配(如果运算符后面没有数字,则会匹配)
  • 您可以在这里轻松查看更多信息
缺点:

  • 性能稍差
  • 正面:

  • 易于阅读和理解
  • 易于维护和扩展
  • 更容易测试

  • 正则表达式是正确的。唯一可能失败的方法是在输入后有一个
    换行符

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


    TA123;T1*2/32M+
    也无效,因为前面没有数字。请添加一些有效的exmapleshi。感谢根据新版本更新的回复问题expresion@user1999453T4RTM+不能有效,因为运算符后面没有数字。请检查编辑!!!!!!!!!很抱歉我对T4RTM+的错误,它现在工作正常,非常感谢vks。