2015-11-06 48 views
0

我正在使用Joomla的JSN Uniform插件接收电子邮件,但它不接受.company域作为有效域。它接受通常的域名(com,net,org,info,biz,...),但不接受像.company这样的域名。域名公司未被接受

现在,我真的没有在PHP方面有经验,因为我更喜欢JavaScript,但根据我的知识,我的问题的解决方案可能在form.php文件中,所以这里是代码的一部分。

PHP:

private function _fieldEmail($post, $fieldIdentifier, $fieldTitle, &$validationForm) 
    { 
     $postFieldIdentifier = isset($post[$fieldIdentifier]) ? $post[$fieldIdentifier] : ''; 
     $postFieldIdentifier = (get_magic_quotes_gpc() == true || get_magic_quotes_runtime() == true) ? stripslashes($postFieldIdentifier) : $postFieldIdentifier; 
     $postEmail = $postFieldIdentifier; 
     if ($postEmail) 
     { 
      $regex = '/^[_a-zA-Z0-9-]+(\.[_a-zA-Z0-9-]+)*@[a-zA-Z0-9-]+(\.[a-zA-Z0-9-]+)*(\.[a-zA-Z]{2,6})$/'; 
      if (!preg_match($regex, $postEmail)) 
      { 
       $validationForm[$fieldIdentifier] = JText::sprintf('JSN_UNIFORM_FIELD_EMAIL', $fieldTitle); 
      } 
      else 
      { 
       return $postFieldIdentifier ? $postFieldIdentifier : ""; 
      } 
     } 
     else 
     { 
      return $postFieldIdentifier ? $postFieldIdentifier : ""; 
     } 

    } 

有人能帮助我,请与本?

谢谢。

编辑:我试图将正则表达式值从2,6改为2,但仍然没有改变。

请参阅PHP的小提琴手在这里:http://viper-7.com/CqxAMZ

+0

谚语的好例子*如果用正则表达式解决问题,现在有两个问题。* :-)认真地告诉“JSN Uniform”插件开发人员要与时俱进。 –

+0

@OllieJones人们在电子邮件验证方面对正则表达式抱怨很多,但最深入和最自信的表达方式在那里;涵盖99.99%的“真人”甚至不会介绍的边缘案例:P – Flosculus

+0

我编辑了这个问题。 – super11

回答

1

变化{2,6}{2,7}结尾。

这表示正则表达式的最后部分应该包含2到7个字符(“公司”超过了6的限制)。

+0

阅读:最长允许的顶级域名是63个字符。 http://stackoverflow.com/questions/9238640/how-long-can-a-tld-possibly-be –

+0

请参阅编辑。 – super11

3

此时应更换正则表达式是这样的:

$regex = '/^[_a-zA-Z0-9-]+(\.[_a-zA-Z0-9-]+)*@[a-zA-Z0-9-]+(\.[a-zA-Z0-9-]+)*(\.[a-zA-Z]{2,})$/'; 

接受任何大小比一个大的领域。现在,它被限制于在被检体2和6之间。更尺寸在http://www.regular-expressions.info/repeat.html

+0

请参阅编辑。 – super11

+0

@ super11我只能得到“限制访问” – Amarnasan

+0

你能看到下面的代码吗? – super11

1

替换:

$regex = '/^[_a-zA-Z0-9-]+(\.[_a-zA-Z0-9-]+)*@[a-zA-Z0-9-]+(\.[a-zA-Z0-9-]+)*(\.[a-zA-Z]{2,6})$/'; 
if (!preg_match($regex, $postEmail)) 
{ 
    $validationForm[$fieldIdentifier] = JText::sprintf('JSN_UNIFORM_FIELD_EMAIL', $fieldTitle); 
} 

与:

if (!filter_var($postEmail, FILTER_VALIDATE_EMAIL)) { 
    $validationForm[$fieldIdentifier] = JText::sprintf('JSN_UNIFORM_FIELD_EMAIL', $fieldTitle); 
} 

电子邮件validate为更复杂的是一个单行的正则表达式。

+0

谢谢,我究竟在哪里放置此代码? – super11

+0

@ super11在那里,我已经更新。 – Flosculus

+0

它仍然无法使用,请参阅小提琴:http://viper-7.com/CqxAMZ – super11