首页 文章

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

提问于
浏览
6

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

有效

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

无效

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

10 回答

  • 2

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

    • ^$ 分别是字符串锚点的开头和结尾

    • \d 匹配一个数字

    • [a-zA-Z] 匹配一封信

    • [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]*$
     \_/\______/\_________/
    

    这三部分是:

    • 也许有些数字作为前缀......

    • 但绝对是一封信!

    • 然后可能会有一些数字和字母作为后缀

    参考文献

  • 1

    这应该这样做:

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

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

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

    您也可以使用 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));
    
  • 32
    ^([a-zA-Z0-9]*)([a-zA-Z]+)([a-zA-Z0-9]*)$
    
  • 2

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

    • 这一切都是字母数字吗?

    • 至少有一封信吗?

  • -2

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

    • (?=.*[a-z]) 正向前瞻以确保字符串中至少有一个字母(但不消耗任何字符) - 一旦它返回就会放弃匹配的字符(在这种情况下,只要它找到一个字母)) .

    • [a-zA-Z0-9]+ 确保字符串仅包含字母数字字符 .

    • ^$ 是字符串分隔符的开头和结尾 .

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

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

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

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

相关问题