Php preg_匹配不起作用
该脚本检查是否有特殊字符,如果有,则调用preg match的“Invalid”函数,否则显示username available。这里发生的事情是,每次我写一个特殊的字符,比如#@%^&它仍然说用户名可用,而不是说无效,这不是它应该如何工作的。我已经检查了PHP代码的错误,它看起来是干净的。我尝试了论坛上的所有内容,但找不到解决方案。非常感谢您的贡献Php preg_匹配不起作用,php,preg-match,Php,Preg Match,该脚本检查是否有特殊字符,如果有,则调用preg match的“Invalid”函数,否则显示username available。这里发生的事情是,每次我写一个特殊的字符,比如#@%^&它仍然说用户名可用,而不是说无效,这不是它应该如何工作的。我已经检查了PHP代码的错误,它看起来是干净的。我尝试了论坛上的所有内容,但找不到解决方案。非常感谢您的贡献 if(isset($_POST['login'])) { $login = mysql_real_escape_string($_POS
if(isset($_POST['login'])) {
$login = mysql_real_escape_string($_POST['login']);
if(!empty($login)) {
$login_query = mysql_query("SELECT COUNT(`id`) FROM `account` WHERE `login` = '$login'");
$login_result = mysql_result($login_query,0);
if($login_result == 0) {
echo 'yes';
} else {
echo 'no';
}
}
}
if ( preg_match("/^[a-zA-Z0-9[:space:]]+$/" , $login) ) {
echo 'noinput';
}
另外,我不是一个从互联网上盗取代码并试图让其他人为他工作的孩子,我已经写了70%的剧本,除了我一直坚持的特殊角色之外,它的效果非常好。我希望你能帮助我。谢谢大家! 不确定你的问题是什么。我刚刚编写了以下程序:
<?php
$input="good string";
$input2="bad@string";
if (preg_match("/^[a-zA-Z0-9[:space:]]+$/",$input2)) {
echo $input2." matches\n";
}
else {
echo $input2." does not match\n";
}
if (preg_match("/^[a-zA-Z0-9[:space:]]+$/",$input)) {
echo $input." matches\n";
}
else {
echo $input." does not match\n";
}
换句话说,检查字符串“是”、“否”、“无输入”
。但是,您的代码的结构和运行方式并不是您生成的输出。关于这一点,我建议您参考上述四个案例
解决方案
您需要将对无效输入的检查移到代码的前面;您需要在找到不匹配的用户名后立即返回。我认为以下措施会奏效:
if(isset($_POST['login'])) {
$login = mysql_real_escape_string($_POST['login']);
if ( preg_match("/^[a-zA-Z0-9[:space:]]+$/" , $login) )
{
$login_query = mysql_query("SELECT COUNT(`id`) FROM `account` WHERE `login` = '$login'");
$login_result = mysql_result($login_query,0);
if($login_result == 0)
{
echo 'yes';
}
else
{
echo 'no';
}
}
else
{
echo('noinput');
}
}
您的正则表达式似乎不包含特殊字符。您需要在数字和alpha之外添加要捕获的字符 请看下面的建议: 尝试类似于
/^[a-zA-Z0-9\$[:space:]+$/
\$
说明了文字字符。/[^a-zA-Z0-9[:space:]]+$/试试这个,告诉我它是否有效。你能添加一些示例输入和预期输出吗?也许你也应该在preg\u匹配之前做一个var\u dump($login)
,当你转义字符串时,所有特殊字符都变成“好”字符…@user2986690:你可以通过添加var\u dump($login)来验证Floris的评论在preg_match()
语句之前执行code>。你太快就逃离了输入。您只能在将其插入数据库之前执行此操作。能否显示实际确定用户名是否可用的代码?您的preg_match
代码在您签入数据库并打印“是”或“否”后运行。还发生了什么?你在原来的帖子中说你不希望特殊字符被允许,但在另一篇评论中你说这些字符是被允许的。是哪一个?哇,太谢谢你了!!它很有魅力,很高兴它奏效了。很抱歉,你不能使用我的skype-这不是本网站的工作方式。但是如果你对这个答案发表进一步的评论,我会得到通知。如果我有时间,我可能会回应。不管怎样,要隐藏这个吗?Floris请编辑这个我很高兴(:@user2986690-这段代码没有什么独特之处。如果你能匿名化变量等,那将比彻底销毁这段内容更好。一旦你得到答案,删除你的问题对回答者和未来的访问者都不公平。@user2986690我很遗憾看到你想删除这些内容这是我的答案。要知道,一旦你在网上发布了一些东西,“它就是永远的”。即使我们删除了这篇文章,编辑历史仍然存在。不确定你相信你的“竞争对手”是谁,但正如布拉德指出的,你的代码并没有那么特别。作为一种姿态,我拿出了“代码快照”从你的链接中删除,因为它实际上与我的答案无关。但试图通过建议大量编辑来删除答案并不是正确的方法。
if(isset($_POST['login'])) {
$login = mysql_real_escape_string($_POST['login']);
if ( preg_match("/^[a-zA-Z0-9[:space:]]+$/" , $login) )
{
$login_query = mysql_query("SELECT COUNT(`id`) FROM `account` WHERE `login` = '$login'");
$login_result = mysql_result($login_query,0);
if($login_result == 0)
{
echo 'yes';
}
else
{
echo 'no';
}
}
else
{
echo('noinput');
}
}