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

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

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

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

Q&A

6回答

13151閲覧

PHP preg_match 全角半角の数字のみ

marimokomokmOk

総合スコア52

PHP

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

0グッド

0クリップ

投稿2017/05/09 03:17

編集2022/01/12 10:55

PHP、preg_matchでわからないとこがあります。
全角半角の数字のみマッチさせたいので、
preg_match('/^[0-90-9]$/', $word)){
としたらできず、
preg_match('/^.*[0-90-9]$/', $word)
としたらできました。
なぜでしょう??
.*はなんでしょうか?

php:

1<?php require 'header.php';?> 2<form action="word-output.php" method="post"> 3<input type="text" name="word"> 4<input type="submit" value="確定"> 5</form> 6<?php require 'footer.php';?>

php:word

1<?php require 'header.php';?> 2<?php 3$word = $_POST['word']; 4// if(preg_match('/^[0-90-9]$/', $word)){ 5 if(preg_match('/^.*[0-90-9]$/', $word)){ 6 echo 'ok'; 7}else{ 8 echo 'NG'; 9} 10?> 11<?php require 'footer.php';?>

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

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

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

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

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

kei344

2017/05/09 03:39

「大文字小文字」ではなく「全角半角」では?
marimokomokmOk

2017/05/09 04:32

修正しました。ありがとうございます。
guest

回答6

0

いくつも問題があります(他の人が指摘していない部分に絞りました)。

  • 全角文字をpreg_xxxで処理したい場合、正規表現をUTF-8モードにする必要があります。/.../uと、最後にuを入れましょう。
  • 文字クラス内の全角ハイフンはただの文字です。0-9ではなく、0-9とする必要があります。

投稿2017/05/09 04:20

maisumakun

総合スコア145121

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

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

yambejp

2017/05/09 04:25

ああ、たしかに0-9の間が全角になってますわ・・・
marimokomokmOk

2017/05/09 04:26

ご解答下さりありがとうございます ただしくわこれですか preg_match('/^.*[0-90-9]$/', $word) ありがとうございます
root_jp

2017/05/09 05:34

>/.../uと、最後にuを入れましょう。
marimokomokmOk

2017/05/09 05:39

preg_match('/^.*[0-90-9]$/u', $word) ですね>< あ1など数字以外の文字が混ざってしまいます(。*゜;ё;゜*)
guest

0

https://3v4l.org/b7skh

php

1<?php 2 3function chk($word) { 4 echo PHP_EOL . 'Word: ' . $word . PHP_EOL; 5 echo 'pattern: 1.' . PHP_EOL; 6 if (preg_match('/^.*[0-90-9]$/u', $word)) { 7 echo 'Ok.' . PHP_EOL; 8 } 9 else { 10 echo 'Ng.' . PHP_EOL; 11 }; 12 echo 'pattern: 2.' . PHP_EOL; 13 if (preg_match('/^[0-90-9]+$/u', $word)) { 14 echo 'Ok.' . PHP_EOL; 15 } 16 else { 17 echo 'Ng.' . PHP_EOL; 18 }; 19} 20 21chk('abc12345'); 22chk('abc12345'); 23chk('12345'); 24chk('12345'); 25chk('1122334455');

実行結果
こんな正規表現で大丈夫か?


半角数字のみということであれば。
https://3v4l.org/8C3lC

php

1<?php 2 3function chk($word) { 4 echo PHP_EOL . 'Word: ' . $word . ' - '; 5 if (preg_match('/^[0-9]+$/u', $word)) { 6 echo 'Ok.' . PHP_EOL; 7 } 8 else { 9 echo 'Ng.' . PHP_EOL; 10 }; 11} 12 13chk('abc12345'); 14chk('abc12345'); 15chk('12345abc'); 16chk('12345abc'); 17chk('12345'); 18chk('12345'); 19chk('1122334455'); 20chk('12.345');

結果:
実行結果

正規表現パターンは追々学習していけばよいかと。

投稿2017/05/09 04:45

編集2017/05/09 06:39
退会済みユーザー

退会済みユーザー

総合スコア0

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

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

退会済みユーザー

退会済みユーザー

2017/05/09 04:53

全角半角の数字が混ざっていても良いのかどうかは、仕様から読み取れないので全く考慮しなかった。
marimokomokmOk

2017/05/09 05:24

ご解答下さりありがとうございます 高度ですね よくみて考えてみます。。(;°;ё;°;)
marimokomokmOk

2017/05/09 05:33

あ1など数字以外の文字が混ざらない文字列にマッチしたいです
退会済みユーザー

退会済みユーザー

2017/05/09 06:40

ちゃんとテストパターンまで考えて、テストするロジックを考えて自分でやってみる癖をつけると良いですよ。
guest

0

大文字小文字の数字のみマッチさせたいので、

そもそも倍角の数字を大文字とはいいわないですよね?

'/^[0-90-9]$/'

は、先頭から末尾までの間に数字が1つだけ出現するという意味で

'/^.*[0-90-9]$/'

ですと、(数字を含む)なにか適当な文字ではじまって末尾の文字が数字
という意味になります。そういう意味では「'/[0-90-9]$/'」と同意で
命題とは異なります。

せめてこうして下さい

'/^[0-90-9]+$/' → '/^[0-90-9]+$/'

※ハイフン修正しました

投稿2017/05/09 03:29

編集2017/05/09 04:26
yambejp

総合スコア114581

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

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

marimokomokmOk

2017/05/09 04:35

ありがとうございます! ハイフンは必ず半角なんですね!^^
yambejp

2017/05/09 04:37

ハイフンが全角だと [0ー9]→「0」か「-」か「9」という意味になります
guest

0

.は任意の1文字
*は0回以上の繰り返し
ですが。
正規表現の表記法の説明に、これらはちゃんと書いてあります。
http://php.net/manual/ja/reference.pcre.pattern.syntax.php
逐一質問していたらいつまでも自分で学ぶことが出来ないエンジニアに育ってしまいますので、自分で出来るところまでは調べてみるクセを付けた方が良いと思います。

投稿2017/05/09 03:21

kunai

総合スコア5405

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

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

marimokomokmOk

2017/05/09 04:37

ありがとうございます^^ めんどくさがり、だるさでついteratailに気軽に質問してしまいました 悪いクセを直します><。。
guest

0

全角半角の数字のみだけで成り立っているか?という判断をしたいなら、
/^[0-90-9]+$/ じゃないですかね?

$wordに文字がない時も許可するなら/^[0-90-9]*$/ ですね?

投稿2017/05/09 03:33

編集2017/05/09 04:40
root_jp

総合スコア4666

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

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

marimokomokmOk

2017/05/09 04:18

ありがとうございます。 0-9のハイフンは全角のマイナスなんですね。
marimokomokmOk

2017/05/09 04:26

preg_match('/^.*[0-90-9]$/', $word) で通じました^^
root_jp

2017/05/09 04:40 編集

ハイフン修正しました。。。 コピって貼ったので気づきませんでした。失礼しました。
marimokomokmOk

2017/05/09 05:14

これだとあ1でもマッチしてしまいます。。
root_jp

2017/05/09 05:47

.* をつけてるから、「あ1」とマッチするんです。 . と * の説明は、kunaiさんがしてくれていますね。 preg_match('/^[0-90-9]+$/u', $word)
guest

0

スラッシュは範囲、キャレットは文頭、ドルは文末、カギカッコ内は連番。

しか覚えてないですがチェックツールがwebサービスで合った気がします。

投稿2017/05/15 18:01

KatsukiSugiura

総合スコア335

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問