繁体   English   中英

确保用户名不是电话号码

[英]Make sure username is not a phone number

我正在编写一个移动网站,希望用户能够通过用户名或电话号码登录。 我认为验证其响应的简便方法是不允许他们使用电话号码作为用户名进行注册。

问题是,我需要检查用户名字段的输入是10还是11位数字。 这就是我对正则表达式不熟练的地方。 我希望尝试像

    function do_reg($text, $regex)
{
    if (preg_match($regex, $text)) {
        return TRUE;
    } 
    else {
        return FALSE;
    }
}

     $username = $_POST['username'];
     if(do_reg($username, '[0-9]{10,11}')){
            die('cannot use a 10 or 11 digit number as a username');
     }

上面的正则表达式匹配所有10到11位数字的数字。 我想也许我需要一种方法来说明用户输入字段中唯一的内容是10-11位数字还是发疯,否则请释放蝴蝶和彩虹。

编辑:为了记录,我决定确保用户名不是一个数字。 以为这样会更简单,我不喜欢让人们使用数字作为登录名的想法。

所以我最终

if (!empty($username) && preg_match('/^\d+$/', $username )) {
              die('username cannot be a number');
}

谢谢大家的帮助。

您几乎是正确的,除了PHP中的PCRE需要定界符,并且可能还有一些锚点以确保该字段仅由数字组成。

 if(do_reg($username, '/^\d{10,11}$/')){
//                     ^^         ^^

并且可能使用\\d而不是[0-9]

(顺便说一句,您应该直接调用preg_match

if (!preg_match('/^\d{10,11}$/', $username)) {
   release('bufferflies', 'rainbows');
}

您需要锚定正则表达式以匹配整个字符串: ^[0-9]{10,11}$

^匹配字符串的开头; $匹配结尾。

将用户名限制为仅10个字符,并要求用户名以字母开头。 如果要求用户输入至少1个字母字符(因为电话号码不能以0 / o或1 / l开头),用户将如何写10位电话号码作为用户名? (为了安全起见,我至少需要3个alpha字符)。

当您的应用变大时,您可以允许更长的用户名,并考虑以下一些问题:

如果仅测试用户if(do_reg($username, '/^\\d{10,11}$/')){不要使用^或$符号: if(do_reg($username, '/^\\d{10,11}$/')){

我说这是因为任何人都可以通过在用户名中放置字母来击败它,而请使用a1235551212代替: if(do_reg($username, '/\\d{10,11}/')){因为这将标记a1235551212d

另外,重要的是,请记住,所有这些正则表达式都仅检查数字,没有什么可以阻止用户执行以下操作:ltwo3for5six7890。 当然,除非您限制用户名大小。

您只应在正则表达式中包含字符串的开始和结束

^[0-9]{10,11}$

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM