2017-02-20 16 views
1

我正在检查并验证HTML页面的电话号码。
我使用下面的代码来检查电话号码:我如何使用php从HTML页面检查和验证电话号码?

<?php 
class Validation { 
    public $default_filters = array(

     'phone' => array(
      'regex'=>'/^\(?(\d{3})\)?[-\. ]?(\d{3})[-\. ]?(\d{4})$/', 
      'message' => 'is not a valid US phone number format.' 
     ) 
    ); 
    public $filter_list = array(); 

    function Validation($filters=false) { 
     if(is_array($filters)) { 
      $this->filters = $filters; 
     } else { 
      $this->filters = array(); 
     } 
    } 

    function validate($filter,$value) { 
     if(in_array($filter,$this->filters)) { 
      if(in_array('default_filter',$this->filters[$filter])) { 
       $f = $this->default_filters[$this->filters[$filter]['default_filter']]; 
       if(in_array('message',$this->filters[$filter])) { 
        $f['message'] = $this->filters[$filter]['message']; 
       } 
      } else { 
       $f = $this->filters[$filter]; 
      } 
     } else { 
      $f = $this->default_filters[$filter]; 
     } 
     if(!preg_match($f['regex'],$value)) { 
      $ret = array(); 
      $ret[$filter] = $f['message']; 
      return $ret; 
     } 
     return true; 
    } 
} 

此代码工作正常的美国电话号码验证。但我不明白如何通过一个完整的页面从HTML页面提取并检查有效的电话号码?请帮助我,让我明白我能做些什么来满足我的要求。

+0

你问如何写一个刮刀,即一个应用程序,蜘蛛网和检索第三方网站? –

+0

@ÁlvaroGonzález不完全。我正在尝试与我的网站进行实验。这是为了我自己尝试的一些安全性。我只是想知道我如何通过HTML页面的URL并获得验证的电话号码形式 –

+0

@ÁlvaroGonzález即使他是,这是完全允许的和合法的,而不是我们所关心的。 – nbo

回答

0

你的班级在你想完成的任务中没有扮演任何角色,因为它只是一些从未被设计成为刮板的通用验证码。然而,它的有价值的部分(确定美国电话号码的正则表达式)是公共财产的一部分,因此它可以以多种方式重用(扩展类或从其他类调用它):

public $default_filters = array(
    'phone' => array(
     'regex'=>'/^\(?(\d{3})\)?[-\. ]?(\d{3})[-\. ]?(\d{4})$/', 
     'message' => 'is not a valid US phone number format.' 
    ) 
); 

如:

// Scraper is a custom class written by you 
$scraper = new Scraper('http://example.com'); 
$scraper->findByRegularExpression((new Validation())->default_filters['phone']['message']); 

当然,这是假设你不能碰的验证码。

我真的不能回答这个总体问题没有任何写很长的教程或应用程序本身,但这里的一些简单的代码开始:

$dom = new DOMDocument(); 
libxml_use_internal_errors(true); 
$dom->loadHTMLFile('http://example.com'); 
libxml_use_internal_errors(false); 
$xpath = new DOMXPath($dom); 
foreach ($xpath->query('//text()') as $textNode) { 
    var_dump($textNode->nodeValue); 
} 
1

你想看看cURL

cURL是一个计算机软件项目,提供使用各种协议传输数据的库和命令行工具。

1

你应该从你的php脚本中获取页面(使用cURL或任何你想要的)。

找到包含电话号码的div/input,从响应cURL给你。您可以使用类似的DomXPath(它允许您浏览DOM树)。

https://secure.php.net/manual/en/class.domxpath.php

从电话输入获取节点值,并将其传递到您的验证。

这是我会尝试的方式。