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

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

新規登録して質問してみよう
ただいま回答率
85.50%
PHP

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

Q&A

解決済

4回答

2094閲覧

PHPで文字列から整数を取り出したい

igaiga

総合スコア144

PHP

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

0グッド

0クリップ

投稿2016/08/01 03:28

編集2016/08/01 06:59

###前提・実現したいこと
いつもお世話になっています。
フリー入力欄に入れている金額を取り出して、半角数字の整数にしたいのですが、もう少し簡略化したく思います。

入力時にバリデーションしてほしいところですが、諸事情でできません。
入力する人もちゃんとチェックしてないようで全角が混ざっていたり、3桁区切りのカンマがドットだったり、まったく関係ない文字が入っていたりします。。。

以下のように整形して整数にしているのですが、もう少しすっきりさせることができるのではないかと思いましてお知恵を拝借したく思います。

特にif(preg_match("/^[0-9]+$/",$rent_amount[$j]))の部分はまったく同じなので整理したいです。

###該当のソースコード

$j=0; $replace = array('.',','); //賃料の取得 //賃料の取得 $rentamount = str_replace("万円", "",$url2->rent_amount);//20万円などの形式で入力されている想定 $rentamount = mb_convert_kana($rentamount, "a"); $rent_amount[$j] = sprintf('%.0f', $rentamount * 10000); if(preg_match("/^[0-9]+$/",$rent_amount[$j])){ } else { $rent_amount[$j] = ""; } if(!empty($url2->room_keyword1)){ $j++; $room_keyword1 = str_replace("円", "",$url2->room_keyword1);//100,000円などの形式で入力されている想定 $room_keyword1 = mb_convert_kana($room_keyword1, "a"); $rent_amount[$j] = str_replace($replace,'',($room_keyword1)); if(preg_match("/^[0-9]+$/",$rent_amount[$j])){ } else { $rent_amount[$j] = ""; } } if(!empty($url2->room_keyword2)){ $j++; $room_keyword2 = str_replace("円", "",$url2->room_keyword2);//100,000円などの形式で入力されている想定 $room_keyword2 = mb_convert_kana($room_keyword2, "a"); $rent_amount[$j] = str_replace($replace,'',($room_keyword2)); if(preg_match("/^[0-9]+$/",$rent_amount[$j])){ } else { $rent_amount[$j] = ""; } }

気になる質問をクリップする

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答4

0

ベストアンサー

汎用化なら以下の様なことをすればいいきがするが

php

1# 十万以上の漢字には未対応 2function toNumber($val) { 3$val = str_replace("/,/", '', $val); 4$val = str_replace("万", "0000,", $val); 5$val = str_replace("千", "000,", $val); 6$val = str_replace("百", "00,", $val); 7$val = str_replace("十", "0,", $val); 8$val = str_replace("円", "", $val); 9$val = mb_convert_kana($val,"n"); 10$val = rtrim($val, ','); 11$val = explode(",", $val); 12$val = array_sum($val); 13 14return $val; 15} 16 17echo toNumber('190万5百円');

投稿2016/08/01 04:16

asahina_dev

総合スコア610

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

igaiga

2016/08/01 06:37

ありがとうございます。 参考にさせていただいて、関数化した場合のコードを追記しました。 function初めて使ったので間違っている気がしますが。。。
igaiga

2016/08/01 07:01

functionの使い方が間違っているみたいなので削除しました。 functionの使い方の質問になってしまうので一旦解決とさせていただきます。
guest

0

個人的には、無理に数値化せずに、ctype_digit関数などで調べて、数字以外を含んでいたらエラーメッセージを表示するような作りの方が良いと思います。
間違って入力している可能性もあるので、ユーザーに再度入れてもらった方が良いと思いますけどね。

投稿2016/08/01 05:13

ttyp03

総合スコア16996

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2016/08/01 05:17

【数字以外を含んでいたらエラーメッセージを表示するような作り】が厳密なサーバサイドの設計方法として正解なんでしょうね。 (ユーザとして利用するときは、絶対に納得しないけどw)
ttyp03

2016/08/01 05:24

>ユーザとして利用するときは、絶対に納得しないけどw 確かに使う立場からしたら、勝手に変換してよ、と思いますね。 とは言ってもカンマとドットを同じカンマ扱いにするとかは無理がありますよね。 本人はホントにドット(小数点)のつもりで入力している可能性もありますし。
igaiga

2016/08/01 05:41

ありがとうございます。 入力側は外部のASPを使用していてカスタマイズできないのです;; ちょっと特殊な料金表示をしているため、ASP側のデフォルト入力項目に該当するものがなく、しかたなく汎用のフリー入力欄に入れています。 管理システムを入れ替えるのしても費用も掛かるので。。。
ttyp03

2016/08/01 05:48

入力側に全く関与できないのであれば仕方ないですね。 しかし全くのフリー入力だと苦しいですね…。
guest

0

同じような処理をするのであれば、関数化すればよいのでは?

投稿2016/08/01 03:34

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

igaiga

2016/08/01 06:37

ありがとうございます。 関数化した場合のコードを追記しました。 function初めて使ったので間違っている気がしますが。。。
guest

0

大雑把ですが、入力バリデーションしない整数であれば

(1)数字のみを抽出
$hoge = preg_replace("/[^0-9]/", "", $name);
(2)万円の検索
$pos = strpos($name, '万円');
if ($pos) なら $hogeを10000倍

投稿2016/08/01 04:25

A.Ichi

総合スコア4070

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

igaiga

2016/08/01 06:35

ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問