编辑表单以清理/验证电话号码 [英] Editing form to sanitize/validate phone number

查看:165
本文介绍了编辑表单以清理/验证电话号码的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我对PHP的经验非常有限,我真的希望有人可以帮助我。



我想做的是清理/验证电话号码输入只允许数字。



我想我需要使用 FILTER_SANITIZE_NUMBER_INT 但我不知道在哪里或如何使用它。



这是我的代码:

  ?php 

//将电子邮件地址替换为应接收联系表单查询的电子邮件地址。
define('TO_EMAIL','########');

$ aErrors = array();
$ aResults = array();

/ *函数* /

函数stripslashes_if_required($ sContent){

if(get_magic_quotes_gpc()){
return stripslashes $ sContent);
} else {
return $ sContent;
}
}

函数get_current_url_path(){

$ sPageUrl =http://$ _ SERVER [SERVER_NAME] $ _SERVER [ REQUEST_URI];
$ count = strlen(basename($ sPageUrl));
$ sPagePath = substr($ sPageUrl,0, - $ count);
return $ sPagePath;
}

函数输出($ aErrors = array(),$ aResults = array()){//输出JSON

$ bFormSent =空($ aErrors )?真假;
$ aCombinedData = array(
'bFormSent'=> $ bFormSent,
'aErrors'=> $ aErrors,
'aResults'=> $ aResults
);

header('Content-type:application / json');
echo json_encode($ aCombinedData);
退出;
}

//检查支持的PHP版本
if(version_compare(PHP_VERSION,'5.2.0','<')){//需要PHP 5.2此脚本中使用的安全过滤器

$ aErrors [] ='不支持的PHP版本。 < br />< em>最低要求是5.2。< br />您的版本是'。 PHP_VERSION。'。< / em>';
输出($ aErrors);
}


if(!empty($ _ POST)){// Form posted?

//获取已发布数据的安全消毒版本
$ sFromEmail = filter_input(INPUT_POST,'email',FILTER_SANITIZE_EMAIL);
$ sFromName = filter_input(INPUT_POST,'name',FILTER_SANITIZE_STRING,FILTER_FLAG_STRIP_LOW);

$ sMessage =Name:.stripslashes_if_required($ _ POST ['name']);
$ sMessage。=\r\\\
Email:.stripslashes_if_required($ _ POST ['email']);
$ sMessage。=\r\\\
Business:.stripslashes_if_required($ _ POST ['business']);
$ sMessage。=\r\\\
Address:.stripslashes_if_required($ _ POST ['address']);
$ sMessage。=\r\\\
Phone:.stripslashes_if_required($ _ POST ['phone']);
$ sMessage。=\r\\\
Message:.stripslashes_if_required($ _ POST ['message']);
$ sMessage。=\r\\\
- \r\\\
Email从发送。 get_current_url_path();

$ sHeaders =From:'$ sFromName'< $ sFromEmail>。\r\\\
;
$ sHeaders。=Reply-To:'$ sFromName'< $ sFromEmail>;

if(filter_var($ sFromEmail,FILTER_VALIDATE_EMAIL)){//有效的电子邮件格式?

$ bMailSent = mail(TO_EMAIL,$ sFromName的新查询,$ sMessage,$ sHeaders);
if($ bMailSent){
$ aResults [] =发送消息,谢谢!
} else {
$ aErrors [] =邮件未发送,请稍后再试。
}

} else {
$ aErrors [] ='无效的电子邮件地址'。
}
} else {// Nothing posted
$ aErrors [] ='空数据被提交。
}


输出($ aErrors,$ aResults);你有没有看过PHP的 preg_replace 功能?您可以使用 preg_replace('/ [^ 0-9] /','',$ _POST ['phone'])删除任何非数字字符。 / p>

过滤掉字符数据后,您可以随时检查是否有所需的长度:

  $ phone = preg_replace('/ [^ 0-9] /','',$ _POST ['phone']); 
if(strlen($ phone)=== 10){
//电话长度为10个字符(###)### - ####
}

您还可以使用PHP的 preg_match 函数,如这个其他的SO问题。


I have very limited experience with PHP and I'm really hoping someone can help me.

What I want to do is sanitize/validate the phone number input so that only numbers are allowed.

I think I need to use FILTER_SANITIZE_NUMBER_INT but I'm not sure where or how to use it.

Here is my code:

<?php

// Replace the email address with the one that should receive the contact form inquiries.
define('TO_EMAIL', '########');

$aErrors = array();
$aResults = array();

/* Functions */

function stripslashes_if_required($sContent) {

    if(get_magic_quotes_gpc()) {
        return stripslashes($sContent);
    } else {
        return $sContent;
    }
}

function get_current_url_path() {

    $sPageUrl = "http://".$_SERVER["SERVER_NAME"].$_SERVER["REQUEST_URI"];
    $count = strlen(basename($sPageUrl));
    $sPagePath = substr($sPageUrl,0, -$count);
    return $sPagePath;
}

function output($aErrors = array(), $aResults = array()){ // Output JSON

    $bFormSent = empty($aErrors) ? true : false;
    $aCombinedData = array(
        'bFormSent' => $bFormSent,
        'aErrors' => $aErrors,
        'aResults' => $aResults
        );

    header('Content-type: application/json');
    echo json_encode($aCombinedData);
    exit;
}

// Check supported version of PHP
if (version_compare(PHP_VERSION, '5.2.0', '<')) { // PHP 5.2 is required for the safety filters used in this script

    $aErrors[] = 'Unsupported PHP version. <br /><em>Minimum requirement is 5.2.<br />Your version is '. PHP_VERSION .'.</em>';
    output($aErrors);
}


if (!empty($_POST)) { // Form posted?

    // Get a safe-sanitized version of the posted data
    $sFromEmail = filter_input(INPUT_POST, 'email', FILTER_SANITIZE_EMAIL);
    $sFromName = filter_input(INPUT_POST, 'name', FILTER_SANITIZE_STRING, FILTER_FLAG_STRIP_LOW);

    $sMessage  = "Name: ".stripslashes_if_required($_POST['name']);
    $sMessage .= "\r\nEmail: ".stripslashes_if_required($_POST['email']);
    $sMessage .= "\r\nBusiness: ".stripslashes_if_required($_POST['business']); 
    $sMessage .= "\r\nAddress: ".stripslashes_if_required($_POST['address']);
    $sMessage .= "\r\nPhone: ".stripslashes_if_required($_POST['phone']);
    $sMessage .= "\r\nMessage: ".stripslashes_if_required($_POST['message']);
    $sMessage .= "\r\n--\r\nEmail sent from ". get_current_url_path();

    $sHeaders  = "From: '$sFromName' <$sFromEmail>"."\r\n";
    $sHeaders .= "Reply-To: '$sFromName' <$sFromEmail>";

    if (filter_var($sFromEmail, FILTER_VALIDATE_EMAIL)) { // Valid email format?

        $bMailSent = mail(TO_EMAIL, "New inquiry from $sFromName", $sMessage, $sHeaders);
        if ($bMailSent) {
            $aResults[] = "Message sent, thank you!";
        } else {
            $aErrors[] = "Message not sent, please try again later.";
        }

    } else {
        $aErrors[] = 'Invalid email address.';
    }
} else { // Nothing posted
    $aErrors[] = 'Empty data submited.';
}


output($aErrors, $aResults);

解决方案

Have you looked into PHP's preg_replace function? You can strip out any non-numeric character by using preg_replace('/[^0-9]/', '', $_POST['phone']).

Once you filter out the character data, you can always check to see if it is of a desired length:

$phone = preg_replace('/[^0-9]/', '', $_POST['phone']);
if(strlen($phone) === 10) {
    //Phone is 10 characters in length (###) ###-####
}

You can also use PHP's preg_match function as discussed in this other SO question.

这篇关于编辑表单以清理/验证电话号码的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆