2012-08-08 48 views
2

我正在使用存儲過程來驗證輸入參數。輸入參數必須包含a-z和A-Z以及0-9。
例如:
aS78fhE0 - >正確
76AfbRZt - >正確
76afbrzt - >不正確(不包含大寫AZ)
asAfbRZt - >不正確(不包含數字0-9)
4QA53RZJ - >不正確(不包含小寫az)

什麼正則表達式可以驗證輸入參數,如上面的例子。

非常感謝,
Praditha

UPDATE除了字母數字
其他字符是不允許
我使用MySQL 5正則表達式:字符串必須包含a-z和A-Z和0-9

+0

其他* *字符允許? – 2012-08-08 10:02:44

+0

不,就像上面的示例.. – Praditha 2012-08-08 10:23:03

回答

5
約翰斯崗位和隨後的評論

另外:

MySQL的你需要將

SELECT * FROM mytable WHERE mycolumn REGEXP BINARY '[a-z]' 
         AND mycolumn REGEXP BINARY '[A-Z]' 
         AND mycolumn REGEXP BINARY '[0-9]' 

添加額外

AND mycolum REGEXP BINARY '^[a-zA-Z0-9]+$' 

如果你只的字母數字字符串中

+0

我不明白,我只是想這樣'SELECT * FROM tb_m_menu WHERE 'aa11'REGEXP'[A-Z]';',但它返回TRUE。我認爲MySQL的大小寫沒有區別。 – Praditha 2012-08-08 11:30:17

+1

您需要使用二進制字符串來使正則表達式區分大小寫。 – 2012-08-08 11:51:43

+0

你是對的Tim - 編輯; – 2012-08-08 11:58:45

2

版本你可以最多將其分成3個獨立的正則表達式來測試每一種情況下。

[a-z][A-Z],並且[0-9]

和那些比賽的結果放在一起,你可以實現你正在尋找的結果。

編輯:

如果你只是尋找匹配字母數字,你應該做^[a-zA-Z0-9]+$由埃德頭在評論

+0

如果字符串只需要包含這些字符,添加額外的正則表達式'^ [a-zA-Z0-9] + $' – 2012-08-08 10:18:31

+0

這是行不通的,因爲它不允許字母不是字母或數字 – 2012-08-08 10:20:36

+0

請重新閱讀 - 我寫了** JUST ** - 這是更新之前。 – 2012-08-08 10:31:10

2

我的解決方案是通向長期監守表達我將重排列在所有建議6種可能性發現大寫字母,小寫字母和數字需要可以安排在字符串中

^(.*[a-z].*[A-Z].*[0-9].*| 
    .*[a-z].*[0-9].*[A-Z].*| 
    .*[A-Z].*[a-z].*[0-9].*| 
    .*[A-Z].*[0-9].*[a-z].*| 
    .*[0-9].*[a-z].*[A-Z].*| 
    .*[0-9].*[A-Z].*[a-z].*)$ 

編輯:在年底和年初忘記了.*

+0

這允許像'#a * B $ 1'這樣的字符串(正如OP現在指出的)應該是非法的。 – 2012-08-08 10:28:45

+0

我已經試過這樣的,但它仍然不正確'SELECT * FROM my_table的 WHERE 'aS78fhE0' REGEXP「^(* [AZ] * [AZ] * [0-9] *。| * [AZ]。* [0-9]。* [AZ]。* | 。* [AZ]。* [az]。* [0-9]。* | 。* [AZ]。* [0-9]。* [az]。* | 。* [0-9]。* [az]。* [AZ]。* | 。* [0-9]。* [AZ]。* az)。*)$ '' – Praditha 2012-08-08 10:33:23

+0

嘗試從該正則表達式中刪除空格! – user1447257 2012-08-08 14:00:20

3

隨着先行斷言,你可以這樣做:

/^(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9]).*$/ 

更新看來MySQL不支持各地斷言看看。

+0

+1甚至沒有想到,很好的回答 – 2012-08-08 10:08:31

+0

使用不同的正則表達式引擎的存儲過程?因爲MySQL的引擎不支持lookaround斷言。 – 2012-08-08 10:12:16

+0

這匹配任意字符,例如'%aAA9'通過這個正則表達式 – galymzhan 2012-08-08 10:14:56

1

不幸的是,MySQL不支持環視斷言,所以你必須拼出來的正則表達式引擎(假設只有這些字符是合法的):

^(
[A-Za-z0-9]*[a-z][A-Za-z0-9]*[A-Z][A-Za-z0-9]*[0-9][A-Za-z0-9]*| 
[A-Za-z0-9]*[a-z][A-Za-z0-9]*[0-9][A-Za-z0-9]*[A-Z][A-Za-z0-9]*| 
[A-Za-z0-9]*[A-Z][A-Za-z0-9]*[a-z][A-Za-z0-9]*[0-9][A-Za-z0-9]*| 
[A-Za-z0-9]*[A-Z][A-Za-z0-9]*[0-9][A-Za-z0-9]*[a-z][A-Za-z0-9]*| 
[A-Za-z0-9]*[0-9][A-Za-z0-9]*[a-z][A-Za-z0-9]*[A-Z][A-Za-z0-9]*| 
[A-Za-z0-9]*[0-9][A-Za-z0-9]*[A-Z][A-Za-z0-9]*[a-z][A-Za-z0-9]* 
)$ 

,或者在MySQL的:

SELECT * FROM mytable WHERE mycolumn REGEXP BINARY "^([A-Za-z0-9]*[a-z][A-Za-z0-9]*[A-Z][A-Za-z0-9]*[0-9][A-Za-z0-9]*|[A-Za-z0-9]*[a-z][A-Za-z0-9]*[0-9][A-Za-z0-9]*[A-Z][A-Za-z0-9]*|[A-Za-z0-9]*[A-Z][A-Za-z0-9]*[a-z][A-Za-z0-9]*[0-9][A-Za-z0-9]*|[A-Za-z0-9]*[A-Z][A-Za-z0-9]*[0-9][A-Za-z0-9]*[a-z][A-Za-z0-9]*|[A-Za-z0-9]*[0-9][A-Za-z0-9]*[a-z][A-Za-z0-9]*[A-Z][A-Za-z0-9]*|[A-Za-z0-9]*[0-9][A-Za-z0-9]*[A-Z][A-Za-z0-9]*[a-z][A-Za-z0-9]*)$"; 
-1

[A-ZA-Z0-9] * [AZ] + [A-ZA-Z0 -9] * [AZ] + [A-ZA-Z0-9] * [0-9] + [A-ZA-Z0-9] * | [A-ZA-Z0-9] * [AZ] + [ A-ZA-Z0-9] * [0-9] + [A-ZA-Z0-9] * [AZ] + [A-ZA-Z0-9] * | [A-ZA-Z0-9] * [AZ] + [A-ZA-Z0-9] * [AZ] + [A-ZA-Z0-9] * [0-9] + [A-ZA-Z0-9] * | [A-ZA- Z0-9] * [AZ] + [A-ZA-Z0-9] * [0-9] + [A-ZA-Z0-9] * [AZ] + [A-ZA-Z0-9] * | [A-ZA-Z0-9] * [0-9] + [A-ZA-Z0-9] * [AZ] + [A-ZA-Z0-9] * [AZ] + [A-ZA-Z0 -9] * | [A-ZA-Z0-9] * [ 0-9] + [a-zA-Z0-9] * [az] + [a-zA-Z0-9] * [AZ] + [a-zA-Z0-9] *

+0

這或者允許無效字符串,比如'「%§&aA0§$%」'或者(如果你在其周圍添加錨)拒絕有效的字符串,比如'「aA0aA0」'。 – 2012-08-08 11:46:48

相關問題