MYSQL:使用正则表达式REGEX验证输入

时间:2019-01-26 12:08:45

标签: mysql sql regex database nsregularexpression

关于MYSQL,我有一个问题。我想创建一个能够检查输入是否以特定格式给出的函数。

输出应具有以下形状:

***x x (a) n (n) (n) (n)
with :
x = letters and numbers
n = numbers
a = letters
brackets = optional Values***

所以到目前为止,我的解决方案是这个(用户“尼克”帮助了我):

CREATE FUNCTION validate_number(testnumber VARCHAR(7))
RETURNS INT
DETERMINISTIC
RETURN testnumber REGEXP '^[[:alnum:]]{2}[[:alpha:]]?[[:digit:]]{1,4}$';

这种方法适用于大多数情况。 但是,当我输入的值超过了可能的元素数量(最大元素= 7)时,我什么也没得到。

示例:

validate_number('00A00002345')

=>没有结果。

你们知道问题出在哪里吗?

非常感谢您。

2 个答案:

答案 0 :(得分:1)

您实际上是在指出问题的解决方案:)

只需将VARCHAR(7)更改为更大的VARCHAR(2000)

答案 1 :(得分:1)

运行您的函数时,出现错误消息:

select validate_number('00A00002345')
  

数据对于第1行的“ testnumber”列而言太长了

您可以在varchar中添加一个长度。

CREATE FUNCTION validate_number (
    in_testnumber VARCHAR(32000)
)

或者,使用text

CREATE FUNCTION validate_number (
    in_testnumber text
)
RETURNS INT
DETERMINISTIC
BEGIN
    RETURN (in_testnumber REGEXP '^[[:alnum:]]{2}[[:alpha:]]?[[:digit:]]{1,4}$');
END;