电子邮件的正则表达式:密码(PHP)


Regular expression for e-mail:password (PHP)

我对正则表达式并不太陌生,但我只是觉得我更善于阅读和理解它们,而不是自己编写它们。无法使其发挥作用

电子邮件:密码

基本上,它需要验证任何长度的电子邮件地址和密码,用冒号分隔,两边有空格或没有空格

密码可以包含任何字符,包括冒号。电子邮件不能包含冒号,但据我所知,它们无论如何都不能。

真:

  • Em@il.com:密码
  • Em@il.com:p@55w:rd
  • Em@il.co.uk:p@$worD
  • Em@il.com:密码

错误:

  • Nomail.com:密码
  • Nom@ailcom:密码
  • Nomail:密码
  • E: m@il.com:密码

谢谢!


非常感谢F.J!在他的帮助下,加上我通常使用的Markus Sipilä的电子邮件验证,这就是它的样子:

^[a-z0-9,!#'$%&''*'+/='?'^_`'{'|}~-]+('.[a-z0-9,!#'$%&''*'+/='?'^_`'{'|}~-]+)*@[a-z0-9-]+('.[a-z0-9-]+)*'.([a-z]{2,})[ ]?:.*$

当然,在将F.J的代码([]?:.*)添加到任何电子邮件验证字符串的末尾时,请记住,您可能必须去掉行尾的archor。将"可选"部分添加到其中,意味着它可以留空(^$)或(|)跟在字符串后面,这就意味着:

(^$|^[a-z0-9,!#'$%&''*'+/='?'^_`'{'|}~-]+('.[a-z0-9,!#'$%&''*'+/='?'^_`'{'|}~-]+)*@[a-z0-9-]+('.[a-z0-9-]+)*'.([a-z]{2,})[ ]?:.*$)

使用一个好的正则表达式来匹配电子邮件,然后在其末尾添加[ ]?:.*(不需要方括号,但可以更容易地看到其中有一个空格)。

如果您假设电子邮件地址不能包含冒号,那么它就像:一样简单

$string = 'Em@il.com:p@55w:rd';
$colon = strpos($string, ':');
$email = substr($string, 0, $colon);
$passw = substr($string, $colon + 1);
if ( ! filter_var($email, FILTER_VALIDATE_EMAIL)) {
    die('Invalid email address');
}
if (strlen($passw) < 8) { // For example
    die('Invalid password');
}

使用正则表达式验证电子邮件地址几乎是不可能的。大多数情况下,用于验证电子邮件地址的最高级正则表达式可以完成这项工作,但它们是生物无法维护甚至无法理解的怪物。