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

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

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

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

Q&A

解決済

4回答

5421閲覧

PHPで指定文字以外使えないようにする

dalian

総合スコア26

PHP

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

0グッド

2クリップ

投稿2015/04/18 02:58

PHPで指定文字たとえば(a-z A-Z 1-9)のみつかえて
それ以外だとfalseを返すプログラムは可能でしょうか?

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

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

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

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

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

guest

回答4

0

ベストアンサー

lang

1$a = "文字列"; 2if( preg_match("/[A-Za-z0-9]*$/",$a) ){ 3 echo "大丈夫"; 4}else{ 5 echo "駄目な文字がある"; 6} 7 8

投稿2015/04/18 03:57

otn

総合スコア84553

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

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

htsign

2015/04/18 04:13

正規表現使えば簡潔に書けますね…。 なぜ思いつかなかったのか、お恥ずかしい。 ところで、otnさんにお聞きしたいのですが、正規表現文字列の先頭に ^ が含まれていないのは何か意図があるのでしょうか。
otn

2015/04/18 10:11

^ は書き忘れです。
dalian

2015/04/18 12:36

ありがとうございました。 if(preg_match("/^[A-Za-z0-9]*$/",$file)) で無事できました。
退会済みユーザー

退会済みユーザー

2015/04/18 14:05

ふむ… <?php if( preg_match("/^[A-Za-z0-9]*$/", "0123456\n") ){ echo "ほんとうに大丈夫?"; }else{ echo "駄目な文字がある"; }
guest

0

lang

1function is_alnum($string) { 2 return !is_null($string) 3 ? preg_match("/^[a-zA-Z0-9]+$/", $string) 4 : false; 5} 6 7// test 8assert(is_alnum("a")); 9assert(is_alnum("A")); 10assert(is_alnum("0")); 11assert(is_alnum("z")); 12assert(is_alnum("Z")); 13assert(is_alnum("9")); 14 15assert(is_alnum("a0")); 16assert(is_alnum("0z")); 17assert(is_alnum("00")); 18 19assert(!is_alnum(null)); 20assert(!is_alnum("")); 21assert(!is_alnum("aにほんご")); 22assert(!is_alnum("にaほんご")); 23assert(!is_alnum("にaほんごa"));

投稿2015/04/18 04:13

kodai

総合スコア759

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

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

0

入力値に対して判定するということでしょうか。
それならばこういうのはどうでしょうか。

lang

1<?php 2$input_value = $_POST['value']; 3$charCollection = array_unique(str_split($input_value)); 4 5$range = array_merge(range('A', 'Z'), range('a', 'z'), range(0, 9)); 6$isContains = true; 7foreach ($charCollection as $char) { 8 if (!in_array($char, $range, true)) { 9 $isContains = false; 10 break; 11 } 12} 13var_dump($isContains); 14?>

もっと効率のいい方法はあるかもしれません…。

投稿2015/04/18 03:34

htsign

総合スコア870

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

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

退会済みユーザー

退会済みユーザー

2015/04/18 15:03

http://php.net/manual/ja/function.in-array.php 三番目のパラメータ strict が TRUE に設定された場合、 in_array() は、haystack の中の needle の 型も確認します。 そうすると、 ``` range(0, 9) ``` はint型で比較されることになると思いますが、$_POST['value']をstr_split()したら"0"は、果たしてint型になるんでしょうか?
htsign

2015/04/18 15:31

おっしゃる通りですね…。本当にお恥ずかしい限りです。
退会済みユーザー

退会済みユーザー

2015/04/18 15:32

いえ、お気になさらずに。 あなたの回答が一番仕様に沿っているかなと思ってよく読んでみたらやっぱり間違っていただけです。
htsign

2015/04/18 15:41

そう言っていただけると救われます。 本質問トピックでは逆に勉強させていただきました。ありがとうございます。
guest

0

あんまり関係ないんですが、

PHPで指定文字たとえば(a-z A-Z 1-9)のみつかえて

1-9って指定だと思うんですけど… なんかみなさん、おかしくありませんか?

投稿2015/04/18 15:22

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

unn

2015/04/18 16:05

確かに他の人の回答だと0使えちゃってるね
退会済みユーザー

退会済みユーザー

2015/04/18 16:06

そこはケアレスミスだと思うんですけど、本当の問題はもっと根深いです。 そういう根深い問題は、予想もしないとんでもないところで火を噴くのでかなり危険です。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問