我需要一个正则表达式的帮助,它检查字符串只包含字母和数字,但不仅包含数字
有效
* letters
* 1wret
* 0123chars
* chars0123
* cha2rs
无效
* 1324
* xcvxxc%$#
* xcv123xxc%$#
* _012chars
* _test
答案 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)
就个人而言(我讨厌正则表达式并且发现它们通常难以维护),我会分两步完成。
答案 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得到了*
和+
搞砸了