【问题标题】:How I can check and validate the phone number from an HTML page using php?如何使用 php 从 HTML 页面检查和验证电话号码?
【发布时间】:2017-02-20 11:15:30
【问题描述】:

我正在尝试从 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 页面中提取和检查有效的电话号码?请帮助我,让我了解我可以做些什么来满足我的要求。

【问题讨论】:

  • 你是在问如何编写一个爬虫,即一个蜘蛛网络并检索第三方网站的应用程序?
  • @ÁlvaroGonzález 不完全是。我正在尝试用我的网站进行实验。这是为了我自己的一些安全措施。我只想知道如何传递 HTML 页面的 URL 并获取验证的电话号码形式
  • @ÁlvaroGonzález 即使他是,这是完全允许和合法的,与我们无关。
  • @nbo 我不同意:上下文和说明是 100% 相关的,因为它们可以理解问题并提供有用的答案。
  • @JafferWilson 当然可以,DOMDocument 类有一个接受文件的 DOMDocument::load() 方法,因此,多亏了 PHP 包装器,它也接受 URL。

标签: php html validation


【解决方案1】:

您想查看cURL

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

【讨论】:

    【解决方案2】:

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

    从 cURL 给您的响应中找到包含电话号码的 div / 输入。您可以使用 DomXPath 之类的库来做到这一点(它允许您在 DOM 树中导航)。

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

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

    这就是我会尝试的方式。

    【讨论】:

      【解决方案3】:

      你的类在你想要完成的任务中并没有真正扮演任何角色,因为它只是一些通用的验证代码,从来没有被设计成一个爬虫。但是,它的重要部分(确定美国电话号码是什么的正则表达式)是公共属性的一部分,因此可以通过多种方式重用它(扩展类或从其他类调用它):

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-11-25
        • 1970-01-01
        • 1970-01-01
        • 2011-03-06
        • 1970-01-01
        • 2016-10-22
        • 1970-01-01
        • 2018-05-05
        相关资源
        最近更新 更多