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

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

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

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

Q&A

解決済

1回答

330閲覧

正規表現入力チェック

shaobao

総合スコア33

PHP

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

0グッド

0クリップ

投稿2017/09/21 06:24

こんにちは、

今、PHPを独学しています。
商品登録ページ→入力チェックページに至る所を作っております。
入力チェックページでは、金額入力チェックを!preg_match('/¥A[0-9]+¥z/',$price)を使ってチェックしているですが、半角整数字で入力してもエラーが表示されて、次のページへ飛べない状態でした。正規表現の書き方間違っていないと思いますが。。。但し、is_numeric関数を使ってチェックするとちゃんと正しく動作します。
でも、なぜ、preg_matchを使ったら、ダメなのか?!。。。
因みに、PCはMacを使用しています。

ご存知の方がお手数をおかけいたしますが、ご教示お願い致します。
何卒よろしくお願いいたします。

入力ページとチェックページは次の通りです。
まず、pro_add.php

session_start(); require 'lib/functions.php'; //トークンを確認 if(!isset($_SESSION['token'])){ $_SESSION['token'] = base64_encode(openssl_random_pseudo_bytes(32)); } $token = $_SESSION['token']; require 'header.php'; ?> <div class="staff_add"> <p>商品追加</p> <?php //errorがあったら表示 if(isset($_SESSION['error'])){ foreach($_SESSION['error'] as $value){ echo '<span class="error">' . h($value) . '</span>' . '\n'; } } //変数にpostされたデータを代入 $name = isset($_POST['name']) ? $_POST['name'] : ''; $price = isset($_POST['price']) ? $_POST['price'] : ''; ?> <form action="pro_add_check.php" method="post"> <p>商品名を入力してください。</p> <p><input type="text" name="name" value="<?php echo h($name); ?>" maxlength="100" required></p> <p>価格を入力してください。</p> <p><input type="text" name="price" value="<?php echo h($price); ?>" required></p> <div> <!--<input type="button" onclick="history.back()" value="戻る">--> <input type="hidden" name="token" value="<?php echo h($token); ?>"> <input type="submit" value="確認"> </div> </form> </div> <?php require 'footer.php'; コード

次、pro_add_check.php

<?php session_start(); require 'lib/functions.php'; ini_set("display_errors", On); error_reporting(E_ALL); //変数初期化 $name = ""; $price = ""; $token = ""; if($_SERVER["REQUEST_METHOD"] == "POST"){ //トークンをcheck if(isset($_POST['token']) && isset($_SESSION['token'])){ $token = $_POST['token']; if($token != $_SESSION['token']){ die('不正アクセスですが発生!'); } }else{ die('操作が間違っています。最初からやり直してください。'); } //変数にpostされたデータを代入 $name = isset($_POST['name']) ? $_POST['name'] : ''; $price = isset($_POST['price']) ? $_POST['price'] : ''; var_dump($price); $error = []; //nameチェック if(trim($name) == ''){ $error[] = '商品名を入力してください'; } //priceチェック if(!preg_match('/¥A[0-9]+¥z/',$price)){ $error[] = '価格をきちんと入力してください。'; } // if(is_numeric($price) == false){ // $error[] = '価格をきちんと入力してください。'; // } $_SESSION['error'] = $error; //error数の確認 if(count($error) > 0){ header('Location: ./pro_add.php'); //確認画面を表示 }else{ require 'header.php'; ?> <div class="staff_add"> <p>商品を追加</p> <form action="pro_add_done.php" method="post"> <input type="hidden" name="name" value="<?php echo h($name); ?>"> <input type="hidden" name="price" value="<?php echo h($price); ?>"> <p>商品名</p> <p><?php echo h($name); ?></p> <p>価格</p> <p><?php echo h($price); ?>円</p> <div> <input type="button" onclick="history.back()" value="戻る"> <input type="hidden" name="token" value="<?php echo h($token); ?>"> <input type="submit" value="確認"> </div> </form> </div> <?php } } require 'footer.php';

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

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

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

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

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

guest

回答1

0

ベストアンサー

if(!preg_match('/¥A[0-9]+¥z/',$price))ですが、¥バックスラッシュでない円記号になっています。

正しくは、if(!preg_match('/\A[0-9]+\z/',$price))です。

投稿2017/09/21 06:49

編集2017/09/21 06:50
maisumakun

総合スコア145121

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

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

shaobao

2017/09/21 07:25

ご回答いただき、ありがとうございます。 一応、前に、¥を\に変更して試してみてはあったですが、ダメでした。たぶん自分の誤操作かもしれません。 今、おしゃった通り、慎重に再度試してみたら、正常でした。 なんだ、自分は、まだ細かいところに気をつけるべきわ。 お掛け様で解決できました。 ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問