2014-05-16 29 views
0

我試圖做一個函數,將在MySQL中驗證用戶名:unicode用戶名的RegEx模式?

FUNCTION `player_name_is_valid`(name TEXT CHARACTER SET utf8) RETURNS int(11) 
BEGIN 
declare result tinyint(1) DEFAULT 1; 
declare reg tinyint(1) DEFAULT 1; 

IF(CHAR_LENGTH(name) > 16 OR CHAR_LENGTH(name) < 3) THEN 
SET result = 0; #name cannot exceed 16 characters, cannot be less than 3 
END IF; 

SELECT name REGEXP '^[a-z0-9_-]$' INTO reg; 

if(reg = -) THEN 
SET result = 0; 
END IF; 

RETURN result; 
END 

然而,正則表達式部分失敗。無論如何,它返回0。我測試它是'你好',它返回0,'地獄!0'它也返回0.

什麼可能是錯的?

回答

2

MySQL的REGEX只執行模式匹配但不能捕獲。它總是會返回0或1

而且,從DOC:

警告在逐個字節的方式正則表達式和RLIKE運營工作,所以 他們不是多字節安全,可能會產生意想不到的結果爲 多字節字符集。 此外,即使給定的歸類將它們視爲等於,這些運算符也會將它們的字節值與 個字符進行比較,並且重音字符可能不會相當於 。