我需要一个正则表达式的帮助,它检查字符串只包含字母和数字,但不仅仅是数字
有效
* letters * 1wret * 0123chars * chars0123 * cha2rs
无效
* 1324 * xcvxxc%$# * xcv123xxc%$# * _012chars * _test
以下是我们将要使用的正则表达式的组件:
^ 和 $ 分别是字符串锚点的开头和结尾
^
$
\d 匹配一个数字
\d
[a-zA-Z] 匹配一封信
[a-zA-Z]
[a-zA-Z\d] 匹配字母或数字
[a-zA-Z\d]
* 是"zero-or-more"重复
*
有了这些,我们现在可以构成我们需要的正则表达式(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]*$ \_/\______/\_________/
这三部分是:
也许有些数字作为前缀......
但绝对是一封信!
然后可能会有一些数字和字母作为后缀
这应该这样做:
^[0-9]*[a-zA-Z]+[a-zA-Z0-9]*$
这至少需要一个 [a-zA-Z] 字符 .
[a-z0-9]*[a-z]+[a-z0-9]*
您也可以使用 ctype_*() 函数代替使用正则表达式:
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));
^([a-zA-Z0-9]*)([a-zA-Z]+)([a-zA-Z0-9]*)$
就个人而言(我讨厌正则表达式并且发现它们通常难以维护),我会分两步完成 .
这一切都是字母数字吗?
至少有一封信吗?
^(?=.*[a-z])[a-zA-Z0-9]+$
(?=.*[a-z]) 正向前瞻以确保字符串中至少有一个字母(但不消耗任何字符) - 一旦它返回就会放弃匹配的字符(在这种情况下,只要它找到一个字母)) .
(?=.*[a-z])
[a-zA-Z0-9]+ 确保字符串仅包含字母数字字符 .
[a-zA-Z0-9]+
^ 和 $ 是字符串分隔符的开头和结尾 .
^[0-9]*[a-zA-Z]+[0-9a-zA-Z]*$
翻译:从头开始,匹配0或更多数字,然后匹配至少一个字母,然后匹配零个或多个字母或数字直到结束 .
([0-9]*[a-zA-Z]+)+
这应该工作 ^([a-zA-Z0-9]*)([a-zA-Z]+)([a-zA-Z0-9]*)$ 编辑sry得到 * 和 + 搞砸了
+
10 回答
以下是我们将要使用的正则表达式的组件:
^
和$
分别是字符串锚点的开头和结尾\d
匹配一个数字[a-zA-Z]
匹配一封信[a-zA-Z\d]
匹配字母或数字*
是"zero-or-more"重复有了这些,我们现在可以构成我们需要的正则表达式(see on rubular.com):
这是对模式的解释:
这三部分是:
也许有些数字作为前缀......
但绝对是一封信!
然后可能会有一些数字和字母作为后缀
参考文献
这应该这样做:
这至少需要一个
[a-zA-Z]
字符 .您也可以使用
ctype_*()
函数代替使用正则表达式:但是如果你想要一个正则表达式,你可以使用这个:
就个人而言(我讨厌正则表达式并且发现它们通常难以维护),我会分两步完成 .
这一切都是字母数字吗?
至少有一封信吗?
^(?=.*[a-z])[a-zA-Z0-9]+$
(?=.*[a-z])
正向前瞻以确保字符串中至少有一个字母(但不消耗任何字符) - 一旦它返回就会放弃匹配的字符(在这种情况下,只要它找到一个字母)) .[a-zA-Z0-9]+
确保字符串仅包含字母数字字符 .^
和$
是字符串分隔符的开头和结尾 .翻译:从头开始,匹配0或更多数字,然后匹配至少一个字母,然后匹配零个或多个字母或数字直到结束 .
这应该工作
^([a-zA-Z0-9]*)([a-zA-Z]+)([a-zA-Z0-9]*)$
编辑sry得到*
和+
搞砸了