【问题标题】:PHP - preg_match()PHP - preg_match()
【发布时间】:2012-03-28 23:28:27
【问题描述】:

好的,所以我希望用户能够输入从 A 到 Z 的每个字符和从 0 到 9 的每个数字,但我不希望他们输入“特殊字符”。

代码:

if (preg_match("/^[a-zA-Z0-9]$/", $user_name)) {
    #Stuff
}

它如何检查所有给定的字符,然后检查它们是否匹配?我试过preg_match_all(),但我并没有真正理解它。

就像用户输入“FaiL65Mal”一样,我希望它允许它并继续前进。但是如果他们输入“Fail{]^7(”,我希望它出现错误。

【问题讨论】:

    标签: php regex preg-match


    【解决方案1】:

    您只需要在您的正则表达式中添加一个量词:

    零个或多个字符*:

    /^[a-zA-Z0-9]*$/
    

    一个或多个字符+

    /^[a-zA-Z0-9]+$/
    

    您的正则表达式只会匹配一个字符串,其中只有一个字符是字母或数字。您想要零个或多个或一个或多个上述选项之一,具体取决于您是要允许还是拒绝空字符串。

    【讨论】:

    • 谢谢!我希望他们能在我观看的 YouTube 上的一个多小时教程中解释这一点。
    【解决方案2】:

    您的正则表达式需要更改为

    /^[a-zA-Z0-9]{1,8}$/
    

    适用于 1 到 8 个字符之间的用户名。只需将 8 调整为适当的数字,也可以调整为 1。

    当前你的表达式匹配一个字符

    【讨论】:

    • 我认为目标不是将用户名限制为 8 个字符。
    • 我只是以8为例。通常人们对用户名有上限(例如,它们存储在数据库中)。这就是为什么我发表评论说您可以调整这些值。
    【解决方案3】:

    请注意preg_match() 和其他preg_*() 函数不可靠,因为它们在失败时返回0false,所以一个简单的if 不会引发错误。

    考虑使用T-Regx

    if (pattern(('^[a-zA-Z0-9]{1,8}$')->matches($input)) 
    {
        // Matches! :)
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-07-06
      • 2011-05-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多