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 に答える