我有一个数据类型为Oracle(10,8)的NUMBER列。在将数据存储在表中之前,我需要通过java regex验证输入数据。根据oracle的数据类型,有效值包括:


10位数
2位数。 8位数字
3位数。 7位数
4位数。 6位数
没有数字。 8位数字(在Oracle中另存为0.12345678,但输入值可以类似于.12345678)


等等。这些情况的负值也有效。
我一次可以写一个正则表达式。即我们可以使用一个正则表达式检查1234567891。然后,随着范围的变化,我们可以为刻度的所有可能组合编写相应的正则表达式。

我的示例正则表达式:^-?\\d{0,2}(?>\\.\\d{1,8})?$:检查2位数字。 8位数字的情况。

现在我想知道,有没有更简单的方法可以在一个正则表达式中检查所有这些值?一个人总是可以使用“ |”运算符,但此类OR正则表达式的总数将等于数据类型的小数位数。

有什么优雅的解决方案吗?任何指点,欢迎提出建议!

更新:

@Andreas指出(10,8)的实际含义之后,这个问题似乎确实被误导了。从上面提到的无效案例中删除,有效案例是:


(0/1/2位)。(0/1/2 /../ 8位)
0/1/2位数
负面案例

最佳答案

您误解了NUMBER(10,8)的含义:


  使用以下格式指定定点数字:
  
  NUMBER(p,s)
  
  哪里:
  
  
  p是精度或最大有效十进制数字,其中最高有效数字是最左边的非零数字,最低有效数字是最右边的已知数字。 [...]
  s是小数位数,或从小数点到最低有效数字的位数。 [...]
  


这表示最多10个有效十进制数字,其中小数点后8个数字,即2.8。秤不浮动。当然,小数点的每一侧都可以少一些,但微粒数不能少于左侧的2和右侧的8。

Oracle将其命名为定点数,它与使用相同关键字但没有限制的浮点数非常不同,即NUMBER

对于Oracle数据库number literal format,格式为:
java - Java-Oracle NUMBER(10,8)字段的正则表达式-LMLPHP

如果您排除科学计数法,则表示以下内容的正则表达式:

^[+-]?(?:\d{1,2}(?:\.\d{0,8})?|\.\d{1,8})$

关于java - Java-Oracle NUMBER(10,8)字段的正则表达式,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/49160222/

10-10 13:00