【发布时间】:2017-10-02 19:32:06
【问题描述】:
我有以下 preg_match 语句,它允许输入只能是字母 a 到 z 和数字 0 到 9,并且长度必须在 5 到 30 个字符之间。
但是,我还要如何确保输入不是全数字?例如它必须至少包含 1 个 a 到 z 字母?
if (preg_match ('/^[a-zA-Z0-9\'.]{5,30}$/i', $str['user'])) {
}
【问题讨论】:
标签: regex preg-match
我有以下 preg_match 语句,它允许输入只能是字母 a 到 z 和数字 0 到 9,并且长度必须在 5 到 30 个字符之间。
但是,我还要如何确保输入不是全数字?例如它必须至少包含 1 个 a 到 z 字母?
if (preg_match ('/^[a-zA-Z0-9\'.]{5,30}$/i', $str['user'])) {
}
【问题讨论】:
标签: regex preg-match
你写了一个正则表达式,允许输入是字母 a 到 z 和数字 0 到 9,但实际上 ^[a-zA-Z0-9\'.]{5,30}$ 匹配一个由 5 到 30 个 ASCII 字母、数字组成的字符串还有' 或.。
如果您只想让您的正则表达式匹配它所匹配的内容,而不是仅由数字组成的字符串,请使用 (?!\d+$) 前瞻:
'/^(?!\d+$)[a-z0-9\'.]{5,30}$/i'
^^^^^^^^
请注意,如果您使用不区分大小写的 i 标志,则无需指定 A-Z 或 a-z 范围(其中任何一个就足够了)。
(?!\d+$) 是一个负前瞻,如果在当前位置(即是字符串的开头)。
请参阅regex demo。
如果您不想匹配仅由点、' 或数字组成的字符串,请使用
'/^(?!(?:\d+|([\'.])\1*)$)[a-z0-9\'.]{5,30}$/i'
【讨论】: