-1

我对正则表达式并不太陌生,但我只是认为我在阅读和理解它们方面比自己编写它们要好得多。无法让这个工作。

电子邮件:密码

基本上,它需要验证一个电子邮件地址和一个任意长度的密码,用冒号隔开,周围有或没有空格。

密码绝对可以包含任何字符,包括冒号。电子邮件不能包含冒号,但据我所知,它们确实不能包含冒号。

真的:

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

错误的:

  • Nomail.com:密码
  • 名称@ailcom:密码
  • 无邮箱:密码
  • E:m@il.com:密码

谢谢!


非常感谢FJ!在他的帮助以及我通常使用的Markus Sipilä的电子邮件验证的帮助下,它变成了这样:

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

当然,当将 FJ 的代码 ([ ]?:.*) 添加到任何电子邮件验证字符串的末尾时,请记住,您可能必须摆脱行尾弓箭手。向其中添加“可选”部分,这意味着它可以留空 (^$) 或 (|) 跟随字符串,使得:

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

2 回答 2

3

一个好的正则表达式来匹配 email,然后添加[ ]?:.*到它的末尾(方括号不是必需的,但可以更容易地看到那里有一个空格)。

于 2013-02-05T21:29:57.627 回答
0

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

$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');
}

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

于 2013-02-06T10:03:28.833 回答