Another PHP regexp problem...
Ik ben bezig met een chatbot, en de gebruiker kan zijn nickname veranderen door bijvoorbeeld 'nickname Pietje Puk' te verzenden. Ik wil echter dat er alleen a-z A-Z 0-9 en spaties gebruikt mogen worden, anders wordt er een foutmelding teruggezonden naar de gebruiker.
Dit is wat ik heb:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<?php
case "nickname":
if (strlen($bot_msg) <= 9) {
echo "Your nickname is ".$bot_User['nickname'].".";
$bot_replied = true;
} elseif (preg_match("/[^a-zA-Z0-9]/", $bot_msg)) {
echo "I'm sorry, but this is not a valid nickname, please try something else.<error>";
$bot_replied = true;
} else {
$bot_User['nickname'] = substr($bot_msg, 9);
$bot_Mysql['Result'] = mysql_query("UPDATE ".$bot_Mysql['Prefix']."clients SET nickname='".$bot_User['nickname']."' WHERE userkey='".$bot_userkey."' AND user='".$bot_user."' LIMIT 1;") or die(mysql_error());
echo "From now on, I will refer to you as " . $bot_User['nickname'] . ".";
$bot_replied = true;
}
break;
?>
case "nickname":
if (strlen($bot_msg) <= 9) {
echo "Your nickname is ".$bot_User['nickname'].".";
$bot_replied = true;
} elseif (preg_match("/[^a-zA-Z0-9]/", $bot_msg)) {
echo "I'm sorry, but this is not a valid nickname, please try something else.<error>";
$bot_replied = true;
} else {
$bot_User['nickname'] = substr($bot_msg, 9);
$bot_Mysql['Result'] = mysql_query("UPDATE ".$bot_Mysql['Prefix']."clients SET nickname='".$bot_User['nickname']."' WHERE userkey='".$bot_userkey."' AND user='".$bot_user."' LIMIT 1;") or die(mysql_error());
echo "From now on, I will refer to you as " . $bot_User['nickname'] . ".";
$bot_replied = true;
}
break;
?>
Maar ik krijg het niet aan het werkt, wat doe ik verkeerd?
Overigens mag de lengte van het bericht ($bot_msg) niet korter zijn dan negen tekens, anders verzendt de gebruiker enkel het woord 'nickname'.
Alvast heel erg bedankt!
Gerard Nijboer
Ik was vergeten dat ik de gehele boodschap evalueerde, en niet alleen de nieuwe nickname, nu ik de functie 'nickname ' uit de te testen string weglaat, werkt het wel, en knikkert hij hem er uit zodra er iets anders dan :alnum: in je nickname staat.
Sorry!
Je kunt er ook wellicht /^\w+$/ van maken. \w match met alfanumeriek karakters en underscore.