我正在使用php验证用户名,密码和电子邮件。我需要确保我做对了,所以没有人可以绕过登录页面。
这是值:
$email=$_POST['email'];
$username=$_POST['uname'];
$passwd=$_POST['pass'];
$passwd2=$_POST['passcopy'];
到目前为止,我有电子邮件验证:
if(!(preg_match("/^[\.A-z0-9_\-\+]+[@][A-z0-9_\-]+([.][A-z0-9_\-]+)+[A-z]{1,4}$/", $_POST['email'])))
die(msg(0,"You haven't provided a valid email"));
密码等于:
if ($passwd != $passwd2) {
die(msg(0,"Passwords are not equal"));
}
密码长度:
if ((strlen($passwd) < 8) || (strlen($passwd) > 16)) {
die(msg(0,"Your password must be between 8 and 16 characters. Please type in a longer password"));
}
我知道我需要验证用户名。我只想小写a-z0-9以避免人们制作类似的用户名?那么密码,我应该在密码中允许哪些字符?
PS。我还是不明白preg_match和ereg。如果有人可以解释这个"/^[\.A-z0-9_\-\+]+[@][A-z0-9_\-]+
并为我的用户名和密码验证做一个preg_match,那将非常有帮助。
答案 0 :(得分:1)
字符串^[\.A-z0-9_\-\+]+[@][A-z0-9_\-]+
是一个正则表达式,用于描述您验证电子邮件字符串的模式。
让我为你打破不同的部分。
^
这表示模式应该在行的开头匹配。
[\.A-z0-9_\-\+]+
这部分由两个子部分组成,第一个[\.A-z0-9_\-\+]
描述一个字符类,然后一个+表示你想要一个或多个前一个类。
[@]
只匹配一个@
符号。
[A-z0-9_\-]+
另一类带有+
的字符,表示您需要该类中的一个或多个字符。
答案 1 :(得分:1)
"/^[\.A-z0-9_\-\+]+[@][A-z0-9_\-]+/"// write same checking on same line
#1# ^[\.A-z0-9_\-\+]+
char必须以(.a-z0-9 _- +)一个或多个以前的char开头[]
#2# [@]
这个字母不得输入///放入垃圾桶而不是进入他
#3# [A-z0-9_\-]+$// it should be ending with $char
字符串包含char之间的字符(A-Z0-9_-)符号加上一个或多个前一个字符 和$ is char必须以方括号中的前一个字符结束。
你可以使用简单的正则表达式与你之前的相同..
/^[A-z0-9_\-\+@]+$/
// My regex script do same as your previous code
答案 2 :(得分:0)
PS。我还是不明白preg_match和ereg。如果有人可以解释这个
这是如何检查有效电子邮件地址的一个非常糟糕的例子。尝试谷歌更好的例子。请注意,仅仅因为它匹配良好正则表达式并不意味着该人正在那里接收邮件 - 如果您需要验证电子邮件地址,则更好的方法是将激活URL或初始密码邮寄到提供的地址。
呃,正则教育课程需要相当长的时间 - try this为我的用户名和密码验证制作preg_match
只要组合是唯一的并且您handle the data properly
,用户名(或密码)包含的内容无关紧要下进行。
答案 3 :(得分:0)
preg_match
和ereg
是通过regular expression匹配字符串的两种方式。 preg
函数使用PCRE(perl兼容的正则表达式)引擎,是php的推荐正则表达式函数; ereg
函数现已弃用。
我不会解释这个模式,因为它包含在其他答案中,但是如果你想要一个非常彻底的正则表达式教程(并且是免费的,要启动),请查看关于正则表达式的tutorial。资讯
答案 4 :(得分:0)
电子邮件验证:
if (filter_var($_POST["email"], FILTER_VALIDATE_EMAIL) == TRUE) {
$email = $_POST["email"];
} else {
echo "email error";
die;
}