Jaffer Wilson
Jaffer Wilson

Reputation: 7273

How I can check and validate the phone number from an HTML page using php?

I am trying to check and validate the phone number from an HTML page.
I am using the following code to check the phone number:

<?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;
    }
}

This code is working fine for US phone number validation. But I do not understand how to pass a complete page to extract and check the valid phone number from an HTML page? Kindly help me and make me understand what I can do to fulfill my requirement.

Upvotes: 1

Views: 391

Answers (3)

&#193;lvaro Gonz&#225;lez
&#193;lvaro Gonz&#225;lez

Reputation: 146380

Your class does not really play any role in the task you want to accomplish because it's just some generic validation code that was never designed to become a scraper. However, the valuable part of it (the regular expression to determine what a US phone number is) is part of a public property so it can be reused in several ways (extend the class or call it from some other class):

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

E.g.:

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

Of course, this is assuming that you cannot touch the validator code.

I cannot really answer the overall question without either writing a long tutorial or the app itself but here's some quick code to get started:

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

Upvotes: 0

gmourier
gmourier

Reputation: 334

You should get the page from your php script (use cURL or whatever you want).

Find the div / input containing the telephone number from the response cURL give you. You can do that with a library like DomXPath (It allow you to navigate through DOM tree).

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

Get the node values from the telephone input and pass it into your validator.

That is the way i would try it.

Upvotes: 1

nbo
nbo

Reputation: 419

You want to look into cURL.

cURL is a computer software project providing a library and command-line tool for transferring data using various protocols.

Upvotes: 1

Related Questions