Preg_match混乱

时间:2011-09-06 04:54:40

标签: php login preg-match

在开发登录部分时,我收到了错误。

结果总是显示错误的声明。这段代码有什么问题

任何人都可以通过“preg_match”指导我,Wolud喜欢详细了解preg_match。

代码是:

if (isset($_POST['submit'])) 
 {

if (preg_match('%^[A-Za-z0-9]\S{8,20}$%', stripslashes(trim($_POST['userid'])))) 
{
    $u = $_POST['userid'];
    echo $u.'<br />';
} 
else 
{
    $u = FALSE;
    echo '<p><font color="red" size="+1">Please enter a valid User ID!</font></p>';
}

    if (preg_match ('%^[A-Za-z0-9]\S{8,20}$%', stripslashes(trim($_POST['password'])))) 
{
    $p =$_POST['password'];
    $p=sha1($p);
    echo $p;
} 
else 
{
    $p = FALSE;
    echo '<p><font color="red" size="+1">Please enter a valid Password!</font></p>';
}

}

3 个答案:

答案 0 :(得分:3)

在您的用户名验证器中,您只允许使用一个字符。将一个长度说明符放在结束括号后面,就像在密码验证器中一样。

为什么要限制密码中允许的字符?用户应该能够使用他想要的任何特殊字符,并且您也不应该限制最大长度。

答案 1 :(得分:2)

%^ [A-ZA-Z0-9] \ S {8,20} $%

意思是:

A-Z或a-z中的1或0-9 \ s

的8到20

我怀疑那是你的意思吗?

也许在[]

中尝试\ S.

答案 2 :(得分:2)

您可能想要以下内容:

<?php

if( isset( $_POST['submit'] ) ){

  # An array to capture and hold errors - makes testing for, and displaying them
  #  easier down the track.
  $errors = array();

  # First Sanitising of the Form Data
  $P = array_map( 'trim' , $_POST );

  # User ID Check
  if( !isset( $P['userid'] ) || $P['userid']=='' ){
    $errors['userid'] = 'Please enter your desired User ID of between 8 and 20 characters/digits (no spaces)';
  }elseif( !preg_match( '/[a-z0-9]{8,20}/i' , $P['userid'] ) ){
    $errors['userid'] = 'Your User ID must contain between 8 and 20 characters/digits (no spaces)';
  }

  # Password Check
  if( !isset( $P['password'] ) || $P['password']=='' ){
    $errors['password'] = 'Please enter a password of between 8 and 20 characters/digits (no spaces)';
  }elseif( !preg_match( '/[a-z0-9]{8,20}/i' , $P['userid'] ) ){
    $errors['password'] = 'Your Password must contain between 8 and 20 characters/digits (no spaces)';
  }

}

....

?><form>
User ID:
<?php echo ( isset( $errors['userid'] ) ? '<p><font color="red" size="+1">'.$errors['userid'].'</font></p>' : '' ); ?>
<input type="text" name="userid" value="<?php echo ( isset( $P['userid'] ) ? $P['userid'] : '' ); ?>" /><br>
Password:
<?php echo ( isset( $errors['password'] ) ? '<p><font color="red" size="+1">'.$errors['password'].'</font></p>' : '' ); ?>
<input type="password" name="password" /><br>

以上将需要一个UserID和密码,每个都在8到20个字符之间(A到Z或0到9)。 如果提交表单并发现验证测试失败,则表单将显示在无效字段附近的错误消息。它还包括已提交的用户名(因此用户可以根据需要进行编辑),但不包括密码(因为通常不会这样做)。

进行一些Google搜索PHP正则表达式(有很多教程和网站可以帮助您了解更多信息)。

还要看看MD5和SHA-1散列系统,在将密码存储到数据库时应该始终使用它们 - 否则,像索尼一样,如果有人危及您的系统,他们可以看到每个人(可能是重复使用的)密码并可能妥协其他网站上的其他帐户。 (不酷。)