使用 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
需要帮助
- 我的要求是验证输入是否为字母数字(即包含至少一个数字 (0-9) 和一个字母 (A-z))并且长度应为 10 个字符
- 我也想知道上面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:]]')
)
解释
^[[:upper:][:digit:]]{10}$
- 字符串必须仅包含十个大 letters/digits
[[:digit:]]
- 匹配数字
[[:upper:]]
- 匹配大写字母
我有一个 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
需要帮助
- 我的要求是验证输入是否为字母数字(即包含至少一个数字 (0-9) 和一个字母 (A-z))并且长度应为 10 个字符
- 我也想知道上面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:]]')
)
解释
^[[:upper:][:digit:]]{10}$
- 字符串必须仅包含十个大 letters/digits[[:digit:]]
- 匹配数字[[:upper:]]
- 匹配大写字母