正则表达式检查字符串只包含字母和数字,但不仅包括数字

时间:2010-07-29 10:19:12

标签: php regex

我需要一个正则表达式的帮助,它检查字符串只包含字母和数字,但不仅包含数字

有效

* letters
* 1wret
* 0123chars
* chars0123
* cha2rs

无效

* 1324
* xcvxxc%$#
* xcv123xxc%$#
* _012chars
* _test

10 个答案:

答案 0 :(得分:33)

以下是我们将要使用的正则表达式的组件:

  • ^$分别是字符串锚点的开头和结尾
  • \d匹配数字
  • [a-zA-Z]匹配一封信
  • [a-zA-Z\d]匹配字母或数字
  • *是“零或多”重复

有了这些,我们现在可以编写我们需要的正则表达式(see on rubular.com):

^\d*[a-zA-Z][a-zA-Z\d]*$

以下是对模式的解释:

from the beginning...  till the end
|                      |
^\d*[a-zA-Z][a-zA-Z\d]*$
 \_/\______/\_________/

这三部分是:

  • 也许某些数字作为前缀......
  • 但绝对是一封信!
  • 然后可能一些数字和字母作为后缀

参考

答案 1 :(得分:6)

这应该这样做:

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

这至少需要一个[a-zA-Z]

字符

答案 2 :(得分:2)

[a-z0-9]*[a-z]+[a-z0-9]*

答案 3 :(得分:2)

您也可以使用ctype_*()函数:

,而不是使用正则表达式
var_dump(ctype_alnum('letters') && !ctype_digit('letters'));     // bool(true)
var_dump(ctype_alnum('0123chars') && !ctype_digit('0123chars')); // bool(true)
var_dump(ctype_alnum('1324') && !ctype_digit('1324'));           // bool(false)
var_dump(ctype_alnum('xcvxxc%$#') && !ctype_digit('xcvxxc%$#')); // bool(false)

但是如果你想要一个正则表达式,你可以使用它:

var_dump(preg_match('/^[a-z0-9]*[a-z]+[a-z0-9]*$/i', $input));

答案 4 :(得分:1)

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

答案 5 :(得分:1)

^(?=.*[a-z])[a-zA-Z0-9]+$

  • (?=.*[a-z])肯定前瞻以确保字符串中至少有一个字母(但不消耗任何字符) - 一旦它返回就放弃匹配的字符(在这种情况下,尽快它找到了一封信))。
  • [a-zA-Z0-9]+确保字符串仅包含字母数字字符。
  • ^$是字符串分隔符的开头和结尾。

答案 6 :(得分:1)

就个人而言(我讨厌正则表达式并且发现它们通常难以维护),我会分两步完成。

  1. 这一切都是字母数字吗?
  2. 至少有一封信吗?

答案 7 :(得分:0)

([0-9]*[a-zA-Z]+)+

答案 8 :(得分:0)

^[0-9]*[a-zA-Z]+[0-9a-zA-Z]*$

翻译:从头开始,匹配0或更多数字,然后匹配至少一个字母,然后匹配零个或多个字母或数字直到结束。

答案 9 :(得分:-2)

这应该有效^([a-zA-Z0-9]*)([a-zA-Z]+)([a-zA-Z0-9]*)$ 编辑sry得到了*+搞砸了