2017-02-20 59 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

從電話輸入獲取節點值,並將其傳遞到您的驗證。

這是我會嘗試的方式。