我有这个功能来删除所有字母数字字符:
DROP FUNCTION IF EXISTS alphanum;
DELIMITER |
CREATE FUNCTION alphanum( str CHAR(32) ) RETURNS CHAR(16)
BEGIN
DECLARE i, len SMALLINT DEFAULT 1;
DECLARE ret CHAR(32) DEFAULT '';
DECLARE c CHAR(1);
SET len = CHAR_LENGTH( str );
REPEAT
BEGIN
SET c = MID( str, i, 1 );
IF c REGEXP '[[:alnum:]]' THEN
SET ret=CONCAT(ret,c);
END IF;
SET i = i + 1;
END;
UNTIL i > len END REPEAT;
RETURN ret;
END |
DELIMITER ;
如何修改它以允许这两个字符:[
,]
?
例如:
alphanum('hell;o [world] number8$')
将提供:hello[world]number8
答案 0 :(得分:1)
变化:
IF c REGEXP '[[:alnum:]]' THEN
要:
IF c REGEXP '[[:alnum:]\[\]]' THEN
编辑:
我想我在MySQL documentation中从未注意到这一点:
要包含文字]字符,它必须紧跟在左括号[。
IF c REGEXP '[\]\[[:alnum:]]' THEN
我不确定反斜杠是否有必要,所以这可能有效:
IF c REGEXP '[]\[[:alnum:]]' THEN
或者:
IF c REGEXP '[[.left-square-bracket.][.right-square-bracket.][:alnum:]]' THEN
答案 1 :(得分:1)
只需更换此行
即可IF c REGEXP '[[:alnum:]]' THEN
(只允许使用字母和数字)
IF c REGEXP '[[:alnum:]]' OR c = '[' OR c = ']' THEN
或
IF c REGEXP '[[:alnum:]]' OR c IN ('[', ']') THEN
(您可以使用' ['和']')。