使用 oracle regex_like 使用函数验证值的问题

Issues with using function to validaate a value using oracle regex_like

我有一个 PL/SQL 函数,其中我使用 Regex.Below 验证字段值是 PL/SQL 函数中的 if 语句。我试图验证输入是否是字母数字,至少有一个数字和一个字母

if(regexp_like('AB67868777','^(?=.*[0-9])(?=.*[A-Z])([A-Z0-9]{10}+)$')

当执行到上面一行时,returns false 而不是true。我已经验证了正则表达式并且它工作正常。使用了在线 java 正则表达式验证器并测试了上述正则表达式脚本和输入参数。结果是真的。从代码执行它时 returns fall.
需要一些输入来确定为什么上面 PL/SQL 函数中的 if 语句返回 false

需要帮助

  1. 我的要求是验证输入是否为字母数字(即包含至少一个数字 (0-9) 和一个字母 (A-z))并且长度应为 10 个字符
  2. 我也想知道上面if语句失败的根本原因。

非常感谢任何帮助。

在 Oracle 中,正则表达式不支持 look-ahead(和 look-behind)。您可以通过对每个单独的测试使用 REGEXP_LIKE 来获得相同的效果:

if(
      regexp_like('AB67868777','^[A-Z0-9]{10}+$')
  and regexp_like('AB67868777','[0-9]')
  and regexp_like('AB67868777','[A-Z]')
)

使用

而不是不受支持的正面前瞻
if(
      regexp_like('AB67868777','^[[:upper:][:digit:]]{10}$')
  and 
      regexp_like('AB67868777','[[:digit:]]')
  and 
      regexp_like('AB67868777','[[:upper:]]')
)

解释

  1. ^[[:upper:][:digit:]]{10}$ - 字符串必须仅包含十个大 letters/digits
  2. [[:digit:]] - 匹配数字
  3. [[:upper:]] - 匹配大写字母