質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

90.60%

  • PHP

    19869questions

    PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

  • HTML

    8688questions

    HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

  • HTML5

    3883questions

    HTML5 (Hyper Text Markup Language、バージョン 5)は、マークアップ言語であるHTMLの第5版です。

  • 正規表現

    777questions

    正規表現とは特定の文字列によるパターンマッチングを行う際に用いられる宣言型プログラミングです。

  • teratail

    415questions

    teratail(テラテイル)は、プログラミングに特化した日本語Q&Aサイトです。

コード書き換え依頼

受付中

回答 3

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 692

b1ackc0ffee

score 197

下記のコードを、正規表現を使わずに書き換えてほしいです。

使用するときとしないときのメリットも教えてください。

あと、文末に改行が複数入っていた場合、<br>をつけなくするにはどうしたらよいでしょうか。最後の文章のあとは、改行が入っていても無視するようにしてほしいです。

宜しくお願い致します。
------------------------------
<DOCTYPE! html>
<html>
<head>
     <meta charset="UTF-8">
     <title>変換ツール</title>
</head>
<body>
      <div align="center">
          <h1>変換ツール</h1>
      </div>
<p>左側に変換したい文章を記入し、[&lt;br&gt;]もしくは[&lt;br&gt;&lt;br&gt;]ボタンを押してください。
<br>右側に変換後の文章が表示されます。
<?php
if (isset($_POST['left'])) {
      $input = mb_convert_kana($_POST['left'], "a","UTF-8");
var_dump($input);
  if (isset($_POST['br1'])) {
      $replacement = '<br>$1';
}
  else if (isset($_POST['br2'])) {
      $replacement = '<br><br>$1';
}
      $pattern = "/(\\r\\n|\\r|\\n)/";
      $after = preg_replace($pattern, $replacement, $input);
      $after = str_replace("(了)", "",$after);
      $result = $after;
}
?>
<form method="post">
<table>
      <tr>
      <td>
<textarea name="left" rows="20" cols="45" placeholder="ここに変換したい文字を入力してください。">
<?php
            if(isset($_POST['sleft'])){
            echo(htmlspecialchars($_POST['left']));
            }
?>
</textarea>
      </td>
      <td>
            <input type="submit" name="br1" value="<br>" style="width:70px; height: 20px"><br><br>
            <input type="submit" name="br2" value="<br><br>" style="width:70px; height: 20px""width:70px; height: 20px"><br><br><br><br>
            <input type="button" onclick="location.href='translate.php'" value="リセット" style="width:70px; height: 20px">
      </td>
      <td>
<textarea name="right" rows="20" cols="45" placeholder="変換後の文章がこちらに表示されます。"><?php echo htmlspecialchars($result);?></textarea>
      </td>
      </tr>
</table>
</form>
</body>
</html>
------------------------------
見た目、google翻訳みたいな変換ツールを作成したいのです。
・左に変換前のテキストエリア、右に変換後のテキストエリアがあります。
・テキストエリアの間には、3つのボタンがあります。
→改行を<br>に変換するためのボタン・・・①
→改行を<br><br>に変換するためのボタン・・・②
→リセットするためのボタン・・・③
・①②を押したら、半角化され、(了)という文字は削除されます。
  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • 退会済みユーザー

    2016/02/07 05:47

    こちらの質問が他のユーザから「やってほしいことだけを記載した丸投げの質問」という指摘を受けました
    「質問を編集する」ボタンから編集を行い、調査したこと・試したことを記入していただくと、回答が得られやすくなります。

回答 3

+1

正規表現を使わない場合のコードです。
if (isset($_POST['left'])) {
    $input = mb_convert_kana($_POST['left'], "a","UTF-8");

    if (isset($_POST['br1'])) {
        $replacement = '<br>';
    }
    else if (isset($_POST['br2'])) {
        $replacement = '<br><br>';
    }

    $count = 0;
    $after = str_replace("\r\n", "${replacement}\r\n", $input, $count);
    if ($count === 0) {
        $after = str_replace("\r", "${replacement}\r", $input, $count);
    }
    if ($count === 0) {
        $after = str_replace("\n", "${replacement}\n", $input, $count);
    }

    $after = str_replace("(了)", "", $after);
    $result = $after;
}
正規表現を使わなければ、このように、コードが冗長になります。
正規表現を使うことの最大のメリットは、コードが短くなることです。正規表現のデメリットは、通常のプログラミング言語に比べて読みづらいことです。しかし、適切なコメントをつけることで、この問題は解決できます。

文末の改行を削除する用途としても正規表現は使えます。
$input = mb_convert_kana($_POST['left'], "a","UTF-8");
$input = preg_replace("/(\\r|\\n)+\\z/", "", $input);
文末の「改行」ではなく「空白文字」の場合、rtrim関数が使えます。
$input = mb_convert_kana($_POST['left'], "a","UTF-8");
$input = rtrim($input);
rtrim関数で文末の改行を削除することも可能です。
$input = mb_convert_kana($_POST['left'], "a","UTF-8");
$input = rtrim($input, "\r\n");
詳しくは、rtrim関数のリファレンスを参考にしてみてください。

ちなみに、nl2br関数で2つの<br>を入れるには、次のようにします。
$after = nl2br(nl2br($input, false), false);

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

0

やってること nl2br と一緒ですよね…

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2015/06/08 17:46

    そうなのですが、
    <br>をふたつ入れることができませんでした。

    キャンセル

0

なんかよくわからんけど、こういう事かな…

<?
if (isset($_POST['left'])) { 
    $input = mb_convert_kana($_POST['left'], "a","UTF-8"); 
    var_dump($input); 

    $input = str_replace("\r\n", "\n", $input);
    $input = str_replace("\r", "\n", $input);
    if(isset($_POST['br2'])){ $input = str_replace("\n", "\n\n", $input); }
    $result = nl2br(rtrim($input), false);
 }
?>

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 90.60%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

  • 解決済

    List型配列の初期値を格納するコードを短縮したい

    javaでList型配列に初期値を格納する際のコードで、 普通は以下のようにaddメソッドで要素を1つずつ入れこむ記述になるかと思うのですが、 もう少し短いコード(行数)で書く方法

  • 解決済

    改行タグを改行文字の前に挿入したい

    phpでtextareaがあるフォームに改行を含む文字を入力して、 ブラウザに表示しても改行が含まれずに表示されてします。 改行を含んだまま表示する方法を教えて下さい。 (例)

  • 解決済

    PHPでtwitter作成 返信機能について

    1週間前から、PHPの勉強を独学で始めました。 そこでTwitterのようなサービス作成をひとつの目標にして、行っているのですが、一人で解決出来ないところが出てきたので、質問させて

  • 解決済

    テキストエリア_初期値_クリックで削除

    テキストエリアの中に、初期値を設定できますが、 クリックで削除するためのプログラムで、1番シンプルなものをご教示ください。

  • 解決済

    変換ソフトを作成していますが、微調整がしたいです。宜しくお願い致します。

    下記は現在のコードは現在のコードです。 [質問] 1.左右のtextareaの間の3つのボタンを縦に並べたい。 2.最初の説明文「<p>左側に変換したい文章を記入し、[<br>]も

  • 解決済

    php 簡易掲示板の編集

    実現したいこと 簡易掲示板について。 テキストと送信ボタンがある掲示版を扱います。 フォームを送信すると、別に用意したテキストファイルに内容が保存され、そこから読みだされた内

  • 解決済

    PHPとMySQL、phpMyAdminとの連携が上手くいかない。

    平素より大変お世話になっております。 当方、PHPの初学者でございます。 (C#やhtmlはある程度やっているので、関数や条件文や演算子など、オブジェクト指向についての

  • 受付中

    【WP】comment_formのカスタマイズ方法について

    前提・実現したいこと ログインした人だけコメントを投稿できるようにし、comment_formをカスタマイズしてデフォルトの項目に追加して投稿できるようにしたいです。 現在

同じタグがついた質問を見る

  • PHP

    19869questions

    PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

  • HTML

    8688questions

    HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

  • HTML5

    3883questions

    HTML5 (Hyper Text Markup Language、バージョン 5)は、マークアップ言語であるHTMLの第5版です。

  • 正規表現

    777questions

    正規表現とは特定の文字列によるパターンマッチングを行う際に用いられる宣言型プログラミングです。

  • teratail

    415questions

    teratail(テラテイル)は、プログラミングに特化した日本語Q&Aサイトです。