0

我正在尝试让我的代码适用于表单。我希望它验证电话号码。它想继续告诉我电话号码不正确,即使它是正确的。

这就是我所拥有的。我取出了与这部分相关的其余代码以简化它。我不确定我的代码是否正确,但我希望有人只能输入数字。输入一个 10 位的数字字符串,如果可能,将其更改为以下格式 (XXX) XXX-XXXX。

<?php

include_once "contact-config.php";

$error_message = '';

if (!isset($_POST['submit'])) {

  showForm();

} else { //form submitted

  $error = 0;


 if(!empty($_POST['phone'])) {
$phone[2] = clean_var($_POST['phone']);
if (!validPhone($phone[2])) {
  $error = 1;
  $phone[3] = 'color:#FF0000;';
  $phone[4] = '<strong><span style="color:#FF0000;">Invalid Phone Number</span></strong>';
  }
 }
  else {
    $error = 1;
    $phone[3] = 'color:#FF0000;';
  } 

<td class="quote_text" style="width:{$left_col_width}; text-align:right; vertical-align:top; padding:{$cell_padding}; {$phone[3]}"><span class='required'><b>* </b></span>{$phone[0]}</td>
<td style="text-align:left; vertical-align:top; padding:{$cell_padding};"><input type="text" name="{$phone[1]}" value="{$phone[2]}" size="20" maxlength="11" id="{$phone[1]}" /> {$phone[4]}</td>


/* Phone Number Validation Function. */

function validPhone($phone)
{
  $isValid = true;
  if(array_key_exists('phone', $_POST))
  {
    if(!preg_match('/^[0-9]{3}-[0-9]{3}-[0-9]{4}$/', $_POST['phone']))
    {
      $isValid = false;
    }
 }
 return $isValid;
 }
?>
4

1 回答 1

0

尽管我没有深入调试,但我对您的原始代码有一些评论。

  1. http://php.net/manual/en/function.preg-match.php上有一个更复杂的正则表达式,您可以尝试一下。它大约在页面的一半处。我在http://regexpal.com/http://www.solmetra.com/scripts/regex/index.php都尝试了你的正则表达式;它在我使用的电话号码的任何一个地方都不起作用。我从 PHP 参考页面中提取的正则表达式,如下所示,有效。

    /^(?:1(?:[.-])?)?(?:((?=\d{3})))?([2-9]\d{2})(?:(? <=(\d{3})))? ?(?:(?<=\d{3})[.-])?([2-9]\d{2})[. -]?(\d{4})(?: (?i:ext).? ?(\d{1,5}))?$/

  2. 您使用参数调用函数然后不使用函数体中的参数,这让我觉得很奇怪。

  3. 这可能是PHP 的重复主题:美国电话号码验证,非常全面。

于 2013-03-07T21:33:51.570 回答