我对正则表达式并不太陌生,但我只是觉得我更善于阅读和理解它们,而不是自己编写它们。无法使其发挥作用
电子邮件:密码
基本上,它需要验证任何长度的电子邮件地址和密码,用冒号分隔,两边有空格或没有空格
密码可以包含任何字符,包括冒号。电子邮件不能包含冒号,但据我所知,它们无论如何都不能。
真:
- 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');
}
使用正则表达式验证电子邮件地址几乎是不可能的。大多数情况下,用于验证电子邮件地址的最高级正则表达式可以完成这项工作,但它们是生物无法维护甚至无法理解的怪物。