【发布时间】:2015-09-23 09:32:09
【问题描述】:
我目前正在使用 Java 构建 Web 应用程序,并且我是 regex 的新手。我有以下要求来验证公式:
公式可以包含以下字符集:
- 数字:0 - 9
- 阿尔法:A - Z
- 运算符:*、/、+、-
- 分隔符:;
条件:
- 公式必须以“T”开头
- 字符“T”后面必须始终跟一个数字或字母。
- 分隔符后面必须始终跟“T”。
- 字符“M”后面必须始终跟一个运算符。
- 运算符后面必须始终跟一个数字
我有如下表达式:
^(?!.*[*+/-]\D)(?!.*T\W)(?!.*[;:][^T])(?!.*M[^*+/-])[T][A-Z0-9 +/*;:-]*$
上面的正则表达式满足以下表达式,它是有效的:
TA123;T1*2/32M+
但我不知道如何在上面的正则表达式中添加以下验证:
- 运算符后面必须始终跟一个数字
- 字符“T”后面必须始终跟一个数字或字母。
- 分隔符后必须始终跟“T”
- 字符“M”后面必须始终跟一个运算符。
上面的正则表达式部分有效地满足了上述条件,只有下面的那些应该是无效的,但它是有效的,这是错误的:
下面的不应该作为运算符工作(*、/、+、-)必须总是后跟一个数字,但在这种情况下它是有效的:
T4R*
下面的不应该作为字符“T”后跟一个数字或字母,但在这种情况下它是有效的:
T4RT
下面的不应该作为分隔符(;)必须始终跟在“T”之后,但在这种情况下它是有效的:
T4;
下面的不应该工作,因为字符“M”必须总是跟在一个运算符之后,但在这种情况下它是有效的:
T4RTM
嗨@vks,
将您的更改应用到 reg 表达式后,请在下面找到结果:
下面的不应该作为运算符工作(*、/、+、-)必须始终后跟一个数字
它适用于字符但不适用于数字,预期的是数字:
T4R*H 无效
有效的 T4R*5
字符“T”后面必须始终跟一个数字或字母:
T4RT 按预期无效 T4RT5应该有效但实际结果无效 T4R应该有效但实际结果无效
分隔符(;) 后面必须始终跟“T”:
T4;T应该有效但实际结果无效 T4;正如预期的那样无效
字符“M”后面必须始终跟一个运算符:
T4RTM+ 应该有效但实际结果无效 T4RTM 按预期无效
知道如何对正则表达式进行哪些更改才能满足上述条件吗?
提前感谢您的帮助
【问题讨论】:
-
TA123;T1*2/32M+也是无效的,因为前面没有数字。请添加一些有效的例子
标签: java regex validation