2012-08-08 154 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

相关问题