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

MYSQL: Validate Input with Regular Expressions REGEX

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

输出应为以下形状:

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

所以到目前为止我的解决方案是这样的(用户 'Nick' 帮助了我):

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

而且这种方法适用于大多数情况。 但是当我输入的值超过可能的元素数量(最大元素 = 7)时,我没有得到任何结果。

示例:

validate_number('00A00002345')

=> 没有结果。

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

非常感谢您。

你其实是在指出问题的解决方法:)

只需将 VARCHAR(7) 改大一些 VARCHAR(2000)

当我运行你的函数时,我得到错误:

select validate_number('00A00002345')

Data too long for column 'testnumber' at row 1

您可以为 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;