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;
我有一个关于 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;