2017-01-14 311 views
0

我想让我的注册脚本只接受字母和数字,但是我迄今为止所尝试的任何内容都无法使用。它仍然不会接受。PHP preg_match不允许使用

这是到目前为止我的代码

if ($_POST['first'] != "" && preg_match("%^[-a-zA-Z æøå\/]+$%", $_POST['first']) == true && strlen($_POST['first']) > 0) { 
    $input_first = mysqli_real_escape_string($con,$_POST['first']); } 
else { header("Location: ../register.php?n=2"); exit; die(); } 

我在做什么错?

+0

在此工作,https://eval.in/716341。这些字符是否会到达服务器?你不需要所有这些检查。由于正则表达式中的“+”,你知道有一个值,所以它不会是空的,长度将大于1. – chris85

+0

如果你的模式和你的字符串是UTF-8编码,你需要设置[the 'u' modifier](http://php.net/manual/en/reference.pcre.pattern.modifiers.php)。注意你的测试是多余的'!=''''和'strlen> 0'是相同的,你的正则表达式因为你的'+'量词禁止一个空值。 – julp

回答

0

如果你的PHP文件已经是UTF-8编码,你应该告诉你的数据库,你需要UTF-8。而不是摆弄MySQL的配置,只要告诉你的连接对象,你期望的是哪个字符集,数据库会为你完成剩下的工作。

这是一个mysqli的连接对象的例子:

//Test-ak 
    $db = new mysqli($dbHost, $dbUser, $dbPw, $dbName); 
    $db->set_charset("utf8"); 

之后你的查询将返回UTF-8编码的结果。