0

我想要一个只允许字母数字值的正则表达式模式,既不是字母也不是数字,最小长度= 4,最大长度= 15,

我尝试使用/^[a-zA-Z0-9]{4,15}$/,但这种模式也只允许字母和数字。

请帮帮我

4

3 回答 3

2

这应该可以解决问题:

^(?=^.{4,15}$)([a-zA-Z]+[0-9][a-zA-Z0-9]*|[0-9]+[a-zA-Z][a-zA-Z0-9]*)$

请参阅此处的工作示例:http ://regexr.com?351ia

说明:(更新:现在有长度检查)

首先,积极的前瞻(?=^.{4,15}$)检查字符串的长度。

如果您的字符串以字母开头,则正则表达式的这一部分用于评估它:

[a-zA-Z]+[0-9][a-zA-Z0-9]*

  • [a-zA-Z]+表示字符串至少以一个字母开头
  • [0-9]那么在某个时候一定有一个数字
  • [a-zA-Z0-9]*后跟任意数量的数字或字母

如果您的字符串以数字开头,则使用正则表达式的第二部分:

[0-9]+[a-zA-Z][a-zA-Z0-9]*

和上面一样,只是这次字符串中的某处必须有一个字母。

于 2013-05-29T08:52:46.963 回答
0

使用您的原件进行字母数字和长度测试,然后通过在字符串中的任何位置测试数字后跟字母或反之亦然来验证字符串是否包含字母和数字。

   /^[a-z\d]{4,15}$/i.test (s) && /\d[a-z]|[a-z]\d/i.test (s);
于 2013-05-29T09:07:18.733 回答
0

您可能想要进行双重前瞻来查找数字和字母,一旦找到数字和字母,匹配将继续,否则不会。

正则表达式:/^(?=.*?[a-zA-Z])(?=.*?[0-9])[a-zA-Z0-9]{4,15}$/

于 2013-05-29T08:53:02.263 回答