Preg_match不工作

时间:2013-03-30 20:01:46

标签: php preg-match username

我正在用preg_match检查用户名,但是我做错了,只是我不知道我做错了什么,我确实尝试了很多次,但没有成功,所以如果你可以帮助我,非常感谢你,对我来说也是一个很好的教训。这是我正在做的事情:

<?php
  if(isset($_POST['submit'])) 
  {
?>
<html>
<head>
<script language="javascript" src="http://ajax.googleapis.com/ajax/libs/swfobject/2.2/swfobject.js" type="text/javascript"></script>
<script language="javascript" src="config.php?name=<?php echo $_POST['name']; ?>&amp;gender=<?php echo $_POST['gender']; ?>&amp;color=<?php echo $_POST['color']; ?>" type="text/javascript"></script>
</head>
<body>
<!-- Applet Start -->
<br /><div style="text-align: center;">
<div id="lightIRC" style="height:500px; text-align:center;"><p><a href="http://www.adobe.com/go/getflashplayer" title="Get flash player"><img src="http://www.adobe.com/images/shared/download_buttons/get_flash_player.gif" alt="Get Adobe Flash player" /></a></p></div>

<script type="text/javascript">swfobject.embedSWF("http://www.futurechat.nl/chat/lightIRC.swf", "lightIRC", "100%", "500", "10.0.0", "http://www.futurechat.nl/chat/expressInstall.swf", params);</script>
</div>
</body>
</html>
<?php
}
  else {
  print_form();
}
function print_form() {
// MAKE SURE USERNAME IS ALPHANUMERIC
$name = $_POST['name'];
if(preg_match('/[^A-Za-z0-9_-]/', $_POST['name']))
  echo "Invalid Username";
?>
<html>
<head>
<title>Login</title>
<style>
body {font-family: Verdana;}
</style>
</head>
<body>
<form action="chatlogin.php" method="post">
<table cellspacing="0" cellpadding="0" align="center" style="background: #cccccc;text-align: center;font-size: 13px;">
<tr valign="top">
<td>
Nickname: 
<input type="text" name="name">
<br /><br />
Gender: 
<input type="radio" name="gender" value="Male">Male <input type="radio" name="gender" value="Female">Female
<br /><br />
Applet Color: 
<select name="color">
  <option value="lightblue">Lightblue</option>
  <option value="blue">Blue</option>
  <option value="darkorange">Dark Orange</option>
  <option value="black">Black</option>
  <option value="yellow">Yellow</option>
  <option value="green">Green</option>
  <option value="pink">Pink</option>
  <option value="white">White</option>
</select> 
<br /><br />
<input type="submit" name="submit" value="Chat now!">
</td>
</tr></table>
</form>
</body>
</html>
<?php
}
?>

3 个答案:

答案 0 :(得分:0)

更新: OP需要检测无效字符,然后,不需要匹配整个单词,他对这种模式是正确的:

/[^A-Za-z0-9_-]/

真正的问题可以通过删除这部分代码来解决:

$name = $_POST['name'];
if(preg_match('/[^A-Za-z0-9_-]/', $_POST['name']))
  echo "Invalid Username";

到页面开头:

<?php
  if(isset($_POST['submit'])) 
  {
    $name = $_POST['name'];
    if(preg_match('/[^A-Za-z0-9_-]/', $_POST['name']))
      $error = "Invalid Username";
?>

然后你可以在页面正文中回显$error

我将在下面留下答案,以获取一般信息。


您需要在字符组末尾添加+符号以匹配多个字符:

preg_match('/^[^A-Za-z0-9_-]+$/', $_POST['name'])

您的模式只会匹配任何位置的一个字符,因此,您还需要在开头添加^,在结尾添加$以匹配整个单词

答案 1 :(得分:0)

在设置$_POST['name']时,您是否在查看源代码?看起来您正在文档的顶部,Invalid Username标记上方打印<html>,这就是为什么它不会显示在浏览器中(因为它不是有效的HTML)。您应该存储错误消息并将其打印在HTML中,或者在HTML中移动逻辑(由<?php?>标记包围)

试试这段代码:

<?php
$ValidUsername = true;
if(isset($_POST['submit'])) {
    // MAKE SURE USERNAME IS ALPHANUMERIC
    $name = $_POST['name'];
    if(preg_match('/[^A-Za-z0-9_-]/', $name))
      $ValidUsername = false;
}
?>
<?php if(isset($_POST['submit']) && $ValidUsername): ?>
<html>
<head>
<script language="javascript" src="http://ajax.googleapis.com/ajax/libs/swfobject/2.2/swfobject.js" type="text/javascript"></script>
<script language="javascript" src="config.php?name=<?php echo $_POST['name']; ?>&amp;gender=<?php echo $_POST['gender']; ?>&amp;color=<?php echo $_POST['color']; ?>" type="text/javascript"></script>
</head>
<body>
<!-- Applet Start -->
<br /><div style="text-align: center;">
<div id="lightIRC" style="height:500px; text-align:center;"><p><a href="http://www.adobe.com/go/getflashplayer" title="Get flash player"><img src="http://www.adobe.com/images/shared/download_buttons/get_flash_player.gif" alt="Get Adobe Flash player" /></a></p></div>

<script type="text/javascript">swfobject.embedSWF("http://www.futurechat.nl/chat/lightIRC.swf", "lightIRC", "100%", "500", "10.0.0", "http://www.futurechat.nl/chat/expressInstall.swf", params);</script>
</div>
</body>
</html>

<?php else: ?>

<html>
<head>
<title>Login</title>
<style>
body {font-family: Verdana;}
</style>
</head>
<body>
<?php
if (!$ValidUsername)
    echo "<h1>Invalid Username</h1>";
?>
<form action="chatlogin.php" method="post">
<table cellspacing="0" cellpadding="0" align="center" style="background: #cccccc;text-align: center;font-size: 13px;">
<tr valign="top">
<td>
Nickname: 
<input type="text" name="name">
<br /><br />
Gender: 
<input type="radio" name="gender" value="Male">Male <input type="radio" name="gender" value="Female">Female
<br /><br />
Applet Color: 
<select name="color">
  <option value="lightblue">Lightblue</option>
  <option value="blue">Blue</option>
  <option value="darkorange">Dark Orange</option>
  <option value="black">Black</option>
  <option value="yellow">Yellow</option>
  <option value="green">Green</option>
  <option value="pink">Pink</option>
  <option value="white">White</option>
</select> 
<br /><br />
<input type="submit" name="submit" value="Chat now!">
</td>
</tr></table>
</form>
</body>
</html>
<?php endif; ?>

此代码使用Alternate Syntax封装HTML代码。我相信它更容易阅读...

答案 2 :(得分:0)

在正则表达式中,破折号需要是第一个字符才能按字面意思使用。另请参阅Allow - (dash) in regular expression