ウェブ、ショウジン

全角スペース、複数の半角スペースを半角スペースひとつに置換

2009-12-12
Category
PHP

入力フォーム内の「名前」において、名字と名前を区切るのに半角スペースを使用し全角や複数の半角スペースが入っていた場合、これをひとつの半角スペースに置換する例。(内容の前後にスペースがあった場合、これは除去する)

入力内容に全角スペースがあった場合、これを半角スペースひとつに置換。また、半角スペースであっても、これが複数入っていた場合、これをひとつに置換する。

  • 入力された要素に対して、まずは「全角スペース」を「半角スペース」に置換する。(複数あっても、とにかく全て半角スペースに置換する)
  • 続いて、入力された要素の前後にスペース(前段階で半角スペースに置換されている)があった場合、これをtrimで削除
  • その上で、名字と名前の間にあるスペースが複数だった場合、これをひとつに置換する

連続する半角スペースのパターンは正規表現によるパターンマッチを使い、preg_replaceで置換する。この場合1回以上の繰り返しなので「\s」に「+」をつける。(「\s」はタブ、スペース、改行などの空白文字を、「+」は、1回以上の繰り返しを意味する)

そして、Perl互換の正規表現ではひとつのパターンの前後にデリミタ(/)をつけて区切る必要があるので「/\s+/」となる。

以上を踏まえて、以下のような記述になる。(該当部分は4, 5行目)

if( ! $name){ // 変数$nameに値が存在しない場合
    $message.= "お名前を入力して下さい。\n"; // このメッセージを表示
}else{ // それ以外の場合(変数$nameに値が存在する場合)
    $name = str_replace(" ", " ", $name); // 変数$nameの値に含まれる全角スペースを半角スペースに置換して変数$nameに代入
    $name = preg_replace("/\s+/", " ", trim($name)); // 変数$nameの値の前後に半角スペースが含まれていた場合それを削除し、半角スペースが複数あった場合、正規表現を使ってそれをひとつに置換し、変数$nameに代入
    $name_r = explode(" ", $name);    // 半角スペースで分割
    if( ! ($name_r[0] && $name_r[1]) || $name_r[2]){
        // ( 名字・名前の入力不備 || 名字・名前以外に入力あり )
        $message.= "お名前の名字と名前の間に半角スペースを入れて下さい。\n";
    }
}

念のため、簡単な実行例も。

フォームのhtml

<form method="REQUEST" action="sample2.php">
名前:<input name="name" ><br />
<input type="submit" value="送信" />
</form>

送信内容を受け取って内容を表示するsample2.php

<?php
// フォームで送信された内容をデバッグ表示
print_r($_REQUEST);

// 配列の要素nameの値を$nameに代入
$name = $_REQUEST[name];

// $nameの値に含まれる全角スペースを半角に置換
$name = str_replace(" ", " ", $name);

// $nameの値の前後の半角スペースを除去してから連続する半角スペースがあった場合、それを半角スペースひとつに置換
$name = preg_replace("/\s+/", " ", trim($name));

echo "<div>$name</div>";

送信結果のhtmlソースを確認してみると
ピクチャ 2

配列の内容をprint_rでデバッグ表示。これはフォームに入力されたまま、余計な全角スペースが入っている。

半角スペースひとつに置換する処理をした後にechoで出力した内容は、ちゃんと半角スペースひとつ(名字と名前の間)に置換されている。

Categories

Tag Cloud

AdMob Android Apache centos CodeIgniter EC-CUBE facebookアプリ facebookページ feed Firefox Flash google googleanalytics htaccess iPad iPhone JavaScript lamp mobile nginx ogp pear php plugin rollover rss sendmail setting smarty ssh Titanium Mobile Titanium Studio tutorial ubuntu vim VirtualBox vmware vps Windows WordPress xampp youtube さくらインターネット アクセス解析 カスタム投稿