13

如何创建一个只匹配数字的字母的正则表达式?

我试过类似的东西(?>[A-z]+)([a-z0-9]+)

正则表达式应给出以下结果:

1234b --> true
1234 --> false
abcd --> false
abcd4 --> true
4

4 回答 4

11

(?:\d+[a-z]|[a-z]+\d)[a-z\d]*

基本上,其中 1 和 a 是任意数字和任意字母,它匹配 1a 或 a1,由任意数量的字母数字字符包围。

编辑:现在更短,可能更快

于 2012-12-19T12:01:58.540 回答
6

其他答案不正确,将允许任何仅包含字母、数字或两者的字符串。我的表达式将明确排除仅由字母或数字组成的字符串。

[A-Za-z0-9]*([a-zA-Z]+[0-9]+|[0-9]+[a-zA-Z]+)

任意数量的字母和数字,后跟至少一个字母后跟一个数字或至少一个数字后跟一个字母。

但是,可能有一种更简单的方法可以做到这一点。我的似乎很啰嗦。也许不是。有人愿意投吗?:P

于 2012-12-19T11:50:45.407 回答
1

^([a-Z]+[0-9]+|[0-9]+[a-Z]+)[a-Z0-9]*$

和一个受 TimPietzcker 启发的更简单的版本:

^([a-Z]+[0-9]|[0-9]+[a-Z])[a-Z0-9]*$

于 2012-12-19T11:55:12.163 回答
0

如果你不需要,不要让它成为一个正则表达式。使用两个必须匹配的正则表达式。在 Perl 中,它会是这样的

if ( /[a-zA-Z]/ && /\d/ ) 
于 2012-12-19T13:52:17.387 回答