我正在写一个移动网站,我希望用户能够通过用户名或电话号码登录。我认为最容易的方式来验证他们的反应,它不允许他们注册使用电话号码作为他们的用户名。
问题是,我需要检查用户名字段的输入是10位还是11位数字。这就是我在regex中的不足对我不利的地方。我希望能尝试一下
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');
}
谢谢大家的帮助。
发布于 2011-04-03 22:00:02
您几乎是正确的,除非PHP中的PCRE需要分隔符,而且可能需要一些锚点来确保字段仅由数字组成。
if(do_reg($username, '/^\d{10,11}$/')){
// ^^ ^^
并且可能使用\d
而不是[0-9]
。
(顺便说一句,您应该直接调用preg_match
:
if (!preg_match('/^\d{10,11}$/', $username)) {
release('bufferflies', 'rainbows');
}
发布于 2011-04-03 22:00:06
您需要锚定正则表达式以匹配整个字符串:^[0-9]{10,11}$
。
^
与字符串的开头匹配;$
匹配字符串的结尾。
发布于 2011-04-04 00:01:53
将用户名限制为10个字符,并要求用户名以字母开头。如果用户需要输入至少一个alpha字符(因为电话号码不能以0/o或1/l开头),那么用户将如何写一个10位电话号码作为用户名?(见鬼,为了安全起见,我至少需要3个阿尔法字符)。
当您的应用程序变得更大,那么您可以允许更长的用户名,并考虑其中一些问题:
如果您只测试用户名:if(do_reg($username, '/^\d{10,11}$/')){
,请不要使用^或$符号
我之所以说这是因为任何人都可以通过在他们的用户名中添加一个字母来克服这个问题,a1235551212则使用这个:if(do_reg($username, '/\d{10,11}/')){
,因为这将标志着a1235551212d
同样重要的是,请记住,所有这些正则表达式都只是检查数字,没有什么可以阻止用户执行以下操作: ltwo3for5six7890。当然,除非您限制用户名大小。
https://stackoverflow.com/questions/5532797
复制相似问题