今だけ人気マンガ100円レンタル特集♪

教えて頂けますか?
フォームからPOSTされた文字列が半角数値、または文字列の場合許可し、全角数値の場合拒否したいのですが
全角数値が is_numeric で数値として認識しない為
うまくいきません。
他に良い方法がありますか?
よろしくおねがいします。

if ( strlen($_POST['test']) != mb_strlen($_POST['test'],'UTF-8') &&
is_numeric($_POST['test']) == TRUE ){
echo '半角で入力してください。<br />';
}

このQ&Aに関連する最新のQ&A

とは ASCII」に関するQ&A: ASCII端末とは?

A 回答 (4件)

mb_ereg_matchが使えそうだけど、文字コードの指定が


面倒だなっと・・・
というわけで代替案

if( $_POST['test'] != mb_convert_kana($_POST['test'],"n","UTF-8" ){
echo '半角で入力してください。<br />";
}

とかどうでしょ?

mb_convert_kanaで、全角数値を半角数値に変換し
元の文と比較して違えば、元の文に全角数値が含まれていた事になる
という考え方です。
    • good
    • 0
この回答へのお礼

ありがとうございます
うまくいきました

お礼日時:2009/09/15 10:38

最善の方法ではないかもしれませんが、


過去に似たような処理を行ったときの手順を。

function test($exp)
{
 //評価対象文字列を半角に変換したものを用意する。
 $exp2 = mb_convert_kana($val, 'ASKV');

 //半角数値であればtrueを返す。
 if (is_numeric($val)) {
  return true;

 //半角に変換した結果数値になるのであれば、
 //元の値は全角数値であると判断し、falseを返す。
 } else if(is_numeric($exp2)) {
  return false;
 }
}

コードは検証していませんがこんな方法でいかがでしょうか?
    • good
    • 0
この回答へのお礼

ありがとうございます
うまくいきました

お礼日時:2009/09/15 10:38

「数値」とは ASCIIの 0-9 であって、「全角数値」というものは存在しない。

したがって、式「strlen($_POST['test']) != mb_strlen($_POST['test'],'UTF-8')&&
is_numeric($_POST['test']) == TRUE」は成立しない、です。
「is_numeric($_POST['test']) == TRUE」を「preg_match("/\xEF\xBC[\x90-\x99]/",$test)」にでもして、エラーメッセージは「数字は半角で入力してください。」としたらどうかな。
PHPはよく知らないので役にはたてんかも。。。
    • good
    • 0

>全角数値の場合拒否したいのですが


>全角数値が is_numeric で数値として認識しない為

全角数値を拒否するんですから、is_numetricで数値として
認識する必要はないんじゃないの?
    • good
    • 0
この回答へのお礼

全角文字列は許可したいのです。
もしたしたら全角数値がis_numetricでTRUEを返すかな?
と思ったのですがFALSEでしたので、他に方法がないか教えて頂きたく
質問しました。

全角内容固定文字列->許可
半角数値->許可
全角数値->拒否

お礼日時:2009/09/10 15:13

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Qphpで全角英数字を半角英数字に変換したいんですが、できません。

入力フォーム(html)
<input type="text" name="update_content" size="80">
内で「販売価格を100円引き」などと全角で記入し、
postで確認画面に送ります。
確認画面で
<?php $rec_ymd = $_POST["update_content"]; ?>
<input type="hidden" name="update_content" value="<?php $update_content ?>">
<?php print $rec_ymd ?>
で表示させてからinsert.phpで
全角を半角に直してからINSERTしたいんですが、どのようにしたらいいのでしょうか。
insert.php
$update_content = mb_convert_kana($update_content,"n");

$sql='INSERT INTO TEST (update_content) VALUES ("'.$update_content.'");
mysql_query($sql);
としても
echo $update_content;
で表示させようとしたら変換どころか値すら入ってない状態です。

PHP5.1.6です。よろしくお願いします。

入力フォーム(html)
<input type="text" name="update_content" size="80">
内で「販売価格を100円引き」などと全角で記入し、
postで確認画面に送ります。
確認画面で
<?php $rec_ymd = $_POST["update_content"]; ?>
<input type="hidden" name="update_content" value="<?php $update_content ?>">
<?php print $rec_ymd ?>
で表示させてからinsert.phpで
全角を半角に直してからINSERTしたいんですが、どのようにしたらいいのでしょうか。
insert.php
$update_content = mb_convert_kana($u...続きを読む

Aベストアンサー

きちんと文字コードが渡ってないんじゃない?

$update_content = mb_convert_kana($update_content,"n","UTF-8");

Qpreg_matchで全角数字のみ許可したいのです

phpにてメールフォームを使用してます、
最近スパムメールが増えて来たので対処方法を考えました。

お問い合わせの電話番号が現在半角のみ対応してますが、
これを全角の数字のみ通る様にしたいと思います。

現在使用しているのは下記の通りです、

if (!$phone){error("電話番号を入力して下さい");}
if ($phone){
if (!preg_match("/^\d{2,5}-?\d{1,4}-?\d{3,4}$/",$phone)) {error("電話番号の入力が不正です"); }
}

この何処を修正すれば良いのでしょうか?
自分なりに調べましたがお手上げでGive Up状態です。
ご存知の方が居られましたらお知恵をご教授頂ければ助かります。

Aベストアンサー

そもそもスパムを全角英数字で防ごうという発想が誤っています。この方法ではいたちごっこになってしまいます。

今から対策として導入するなら「reCAPTCHA」がおすすめです。歪んだ文字を入力する「CAPTCHA」の後継で、面倒な入力が不要になっています。

http://japan.cnet.com/news/service/35057402/
http://qiita.com/koliainwiki/items/544fe01d8c964c1b99a0

QボタンをクリックでPHP文を実行

ボタンをクリックしたときのみPHP文を実行したいのですが・・・

<input type="button" onClink="<?php~?>">
でいけるかと思ったのですが、
ページ表示時に<?php~?>が実行されてしまい、うまくいきませんでした。

onClink="window.open(test.php)"
という方法以外でお願いします。

Aベストアンサー

AjaxはもともとJavaScriptの機能である非同期通信をつかったもので。Ajaxという言語があるわけではありません

Ajaxを利用するのであれば、JavaScriptのXMLHttpRequestを使って非同期通信できるような実装をしなくてはなりません
簡単にサンプルコードで書けるほど単純なものでもありません

一般的なサーバーサイドスクリプトの動作として、
ボタンを押す->サーバーへリクエストする->サーバーが処理する->クライアントに何かしらの結果を返す(出力する)です
つまり、PHP等のサーバーサイドスクリプトは、遷移させることが大前提で動作します

ですから、ボタンを押してその場でJavaScriptと同じようにPHPが動くなんてことはありえません。
ボタンを押したらサーバーにリクエストする という動作ならば可能です。

つまり
質問で言われているような
onClink="window.open(test.php)"

<form name="f1" action="test.php" method="post">
<input type="submit" name="submit" value="submit" />
</form>
等のような形になります

こういった一般的な方法だと いちいち画面が切り替わったようになってしまうのを嫌って Ajaxでコレと同じことを、画面を切り替えずに行っているだけに過ぎません

AjaxはもともとJavaScriptの機能である非同期通信をつかったもので。Ajaxという言語があるわけではありません

Ajaxを利用するのであれば、JavaScriptのXMLHttpRequestを使って非同期通信できるような実装をしなくてはなりません
簡単にサンプルコードで書けるほど単純なものでもありません

一般的なサーバーサイドスクリプトの動作として、
ボタンを押す->サーバーへリクエストする->サーバーが処理する->クライアントに何かしらの結果を返す(出力する)です
つまり、PHP等のサーバーサイドスクリプトは、...続きを読む

Qillegal string offset

php5.3では動いていたプログラムをphp 5.4 で動かしたらwarning illegal string offsetが出て困っています。以下のプログラムでwarningが出ないようにするにはどのようにコーディングすればよいのでしょうか?


$a = array('exists' => 'foo');
if ($a['exists']['non_existent']) {
print 1;
}
print 2;
exit;

Aベストアンサー

isset()を使えばいいと思います

Q文字列から、特定の文字を削除したい

アンケートで入力された値を受け取り、メールで送信しているのですが、受け取った値から、特定の文字列を削除することは可能でしょうか?

例えば電話番号の入力の場合、
03-xxxx-xxxx →03xxxxxxxx
077-xxx-xxxx →077xxxxxxx
のように、-(ハイフン)が入力されていたら、-を削除した文字列に置換してメール送信したいのです。
入力する時に、3つのテキストエリアに分けるのは諸事情でできないので、特定の文字を削除する関数か処理方法がありましたら、教えていただきたいです。
よろしくお願いします。

Aベストアンサー

str_replace
http://itbtech.itboost.co.jp/man/php_man/function.str-replace.html

<?php
$orig_telno = "03-xxxx-xxxx";

$telno = str_replace("-", "", $orig_telno);
echo $telno;

03xxxxxxxx

“PHP 文字列” あたりをキーワードに検索すれば
そんなに難しいものでもないような。

Qで配列(複数の要素)を渡したいとき?

こんにちわ,

今HTML+PHPで
$hoge[]にいくつかの要素が入っているとき,
それをあるfoo.phpというページに渡したいとき,
echo '<form action="foo.php" method="POST">';
echo '<input type="hidden" name="$hoge[]" >';
echo '</form>';
としたのですが,うまくいきません。

どうしたらよろしいでしょうか。

Aベストアンサー

nameじゃなく、valueでは?
あとやるなら、
for($i=0;$i<count($hoge);$i++){
print "<input type=\"hidden\" name=\"$hoge[$i][0]\" value=\"$hoge[$i][1]\">";
}
とか?

QPHPで偶数と奇数を判断するには

宜しくお願いします。
一覧表示等をする時に見やすいように一行ずつテーブルの色を変えたりすると思うのですが、これをPHPのfor文で自動的に交互に色を変えるようなプログラムを作ろうと思っております。for文で繰り返し処理場合、例えば、

for($n = 0; $n < 100; $n++)
{
 if($n = 偶数)
 {
 $bgcolor = "#ff0000";
 }
 elseif($n = 奇数)
 {
 $bgcolor = "#0000ff";
 }
}

といった形で交互に色を変るには、偶数/奇数の判断が出来ないと無理だと思うのですが、何か良い方法は無いでしょうか?

Aベストアンサー

if($n % 2 == 0) {
 偶数の処理;
} else {
 奇数の処理;
}

%は、割り算をした、余りです。
例)
3を2で割った余りは1
4を2で割った余りは0 

ANDで求める方法もあります。

またこの場合は、一度偶数で判定すれば、奇数の判定は不要です。

Q配列をPOSTで受けとる

タイトルのまんまですが
配列をformで送って
それをPOSTで受け取りたいのですが
うまくいきません

具体的に言うと
<?php
print"<form method=POST action=action.php>";

for($i=0; $i<$n; $i++){
   print"<input type=text name=foo[$i]>";
}
print"<input type=hidden name=n value=$n>";
print"<input type=submit value=go>";
print"<form>";
?>


///////////以下action.php//////////////////
<?php
$n = $_POST["n"];
for($j=0; $j<$n; $j++){
   $foo[$j] = $_POST["foo[$j]"];
   print"$foo[$j]";
}
?>


こんな感じのことがしたいのですが
うまくいきません
どうもPOSTされてないみたいでfoo[$j]はnullです
凡ミスな気がしなくもないんですが...プログラム初心者なんで↓↓
教えてください
よろしくお願いします

タイトルのまんまですが
配列をformで送って
それをPOSTで受け取りたいのですが
うまくいきません

具体的に言うと
<?php
print"<form method=POST action=action.php>";

for($i=0; $i<$n; $i++){
   print"<input type=text name=foo[$i]>";
}
print"<input type=hidden name=n value=$n>";
print"<input type=submit value=go>";
print"<form>";
?>


///////////以下action.php//////////////////
<?php
$n = $_POST["n"];
for($j=0; $j<$n; $j++){
   $foo[$j] = $_POST["foo[$j...続きを読む

Aベストアンサー

atsuGTさんこんにちは。


受け取り側は

$foo = $_POST["foo"];

とするだけで$fooに送信された配列が格納されます。


$_POST["foo[添え字]"] ではなく、
$_POST["foo"][添え字] となります。

QPHPの関数実行

<?php
function disp(){
echo "hello world";
}
?>

<form>
<input type="text">
<input type="button" onclick="<?php disp() ?>">
</form>

といったソースを書いてみたのですが、ボタンを押してみるのですが作動しません。
どこか間違えているのでしょうか、それとも作動しないのでしょうか・・・。
当方としては、formのinputボタンを押したらPHPの関数が実行させるようにしたいのですが・・・。
どなたかご助言をお願いします。

Aベストアンサー

ウソつきました
出来ましたー

<?php

if($_REQUEST[submit] == TRUE){
function disp(){
echo "hello world";
}
}

else{
function disp(){
echo "";
}
}

?>

<form method="post" action="">
<input type="text" value="<?php disp(); ?>">
<input name="submit" type="submit"value="押せ">
</form>

QHTMLフォームのSELECTの幅を一定にするためには?

HTMLフォームのSELECTの幅を一定にするためにはどのようにすれば
いいのでしょうか?

CSS等で設定できるとありがたいのですが、やり方がわかりません。

Aベストアンサー

<select style="width: 200px">


人気Q&Aランキング