MYSQL清理文本字符串保持字母字符和空白

时间:2015-11-04 13:00:43

标签: php mysql sql

我正在尝试编写一个清除MySQL中的文本字符串的函数。它工作正常,但我不能让REGEXP留下空白。当前的声明是

IF c  REGEXP '[A-Za-z]' THEN 

显然,这会取出任何不是字母字符的内容,但如何在列表中添加空格?

我已经改编了另一篇文章中的代码。完整的功能是

    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 '[A-Za-z]' THEN 
        SET ret=CONCAT(ret,c); 
      END IF; 
      SET i = i + 1; 
    END; 
  UNTIL i > len END REPEAT; 
  RETURN ret; 
END;

2 个答案:

答案 0 :(得分:0)

试试这样:

IF c  REGEXP '[A-Za-z]+[[:space:]]+[A-Za-z]+' THEN 

IF c  REGEXP '[A-Za-z]+[[:blank:]]+[A-Za-z]+' THEN 

这匹配

之类的字词
A B
A BB
AA B
AA BB
...

+用于1或更多/ 将*用于0或更多

答案 1 :(得分:0)

我发现问题是什么..我将变量声明为CHAR类型。这不允许存储空白区域。

相应地修改了这个功能,它现在有效。

    CREATE FUNCTION alphanum( str VARCHAR(100) ) RETURNS VARCHAR(100) 
BEGIN 
  DECLARE i, len SMALLINT DEFAULT 1; 
  DECLARE ret VARCHAR(32) DEFAULT ''; 
  DECLARE c VARCHAR(1); 
  SET len = CHAR_LENGTH( str ); 
  REPEAT 
    BEGIN 
      SET c = MID( str, i, 1 ); 
      IF c  REGEXP '[A-Za-z ]' THEN 
        SET ret=CONCAT(ret,c); 
      END IF; 
      SET i = i + 1; 
    END; 
  UNTIL i > len END REPEAT; 
  RETURN ret; 
END;