「PHPの基礎 - 文字列」の版間の差分
232行目: | 232行目: | ||
文字列が全て数字の場合はTRUE、それ以外の場合はFALSEを返す。 | 文字列が全て数字の場合はTRUE、それ以外の場合はFALSEを返す。 | ||
<br> | <br> | ||
※注意<br> | <u>※注意</u><br> | ||
小数点等が含まれている場合もFALSEとなる。この関数では、全ての文字が0~9である必要がある。<br> | <u>小数点等が含まれている場合もFALSEとなる。この関数では、全ての文字が0~9である必要がある。</u><br> | ||
<u>引数に指定した値が、数値または数値として有効な文字列かどうかを判別する場合は、</u><br> | |||
<u>数字または数値文字列の判別(is_numeric関数)セクションを参照すること。</u><br> | |||
<syntaxhighlight lang="php"> | <syntaxhighlight lang="php"> | ||
<?php | <?php | ||
function dispKekka($str) | |||
{ | |||
$bRet = ctype_digit($str); | |||
print('調べる文字列は'.$str.'です<br>'); | |||
if($bRet) | |||
{ | |||
print('文字列は数字だけが含まれています<br><br>'); | |||
} | |||
else | |||
{ | |||
print('文字列は数字以外の文字が含まれています<br><br>'); | |||
} | |||
} | } | ||
$str = '01234'; | |||
$str = '01234'; | dispKekka($str); | ||
dispKekka($str); | |||
$str = 'abc998'; | |||
$str = 'abc998'; | dispKekka($str); | ||
dispKekka($str); | |||
$str = '123.45'; | |||
$str = '123.45'; | dispKekka($str); | ||
dispKekka($str); | ?> | ||
?> | |||
</syntaxhighlight> | </syntaxhighlight> | ||
<br><br> | <br><br> |
2021年3月23日 (火) 17:04時点における版
概要
PHPでは複数のデータ型が存在するが、文字の集合を表すために使用されるデータ型が文字列である。
ここでは、文字列の取り扱いを記載する。
文字列リテラル
文字列を記述する場合、文字の集合をシングルクオーテーション'
またはダブルクオーテーション"
で囲む。
なお、で囲む場合と
""
で囲む場合では、データの扱いが異なる。(詳細は、次のセクションに記載する)
'文字列' "文字列"
複数行に渡る文字列を作成するには、ヒアドキュメントを使用することもできる。
ヒアドキュメントは、<<< <ID名>で始まり<ID名>で終わる間に記述する。ID名は、任意の文字列が指定できる。
また、ヒアドキュメントでは、シングルクオーテーション'
、ダブルクオーテーション"
、空白も文字として扱われる。
<<< ID 文字列1 文字列2 文字列3 ID
以下の例では、ID名をDocumentとしている。
<<< Document
こんにちは。<br />
お元気ですか?
Document
文字列の連結
文字列と他の文字列を連結して新しい文字列を作成するには、.
を使用する。
'文字列1'.'文字列2'
以下の例では、2つの文字列を連結して出力している。
print 'こんにちは。'.'お元気ですか?';
$name = '佐藤';
print $name.'さん。こんにちは。';
また、連結した文字列を変数に格納することもできる。
$name = '佐藤'.'さん';
文字列の出力(echo, print)
文字列を出力するには、echo
とprint
が存在する。
echo
の書式は、以下の通りである。
echo "" void echo(string $arg1 [, string $... ])
echo
は引数に指定した文字列を出力する。
複数の文字列を続けて出力する場合、カンマ,
で区切って文字列を指定する。
echo 'こんにちは';
echo '出身地:', '東京都';
厳密にいうと、echo
は関数ではなくPHPの言語構造の1つである。
そのため、引数を括弧で括る必要はなく、関数のように括弧で括って記述することもできる。
ただし、複数の文字列を引数に指定する場合、括弧で括らない方がよい。
echo('こんにちは');
print
の書式は、以下の通りである。
print "" int print(string $arg)
print
は、引数に指定した文字列を出力する。echo
とは異なり、複数の引数を指定できない。
また、戻り値として常に1を返す。
print 'こんにちは';
print
もecho
と同様、関数ではなくPHPの言語構造の1つである。
そのため、引数を括弧で括る必要はなく、関数のように括弧で括って記述することもできる。
print('こんにちは');
エスケープシーケンス
文字列として入力できない特殊な文字(改行文字等)が存在する。
このような特殊な文字を入力するために、\記号 + 1文字等を使用して、特殊文字等を記述することができる。
このような特殊な記述方法をエスケープシーケンスと呼ぶ。
エスケープシーケンスとして用意されているものには、以下のようなものがある。
¥n 改行 ¥r キャリッジリターン ¥t タブ ¥¥ ¥文字 ¥$ $文字 ¥( 左括弧 ¥) 右括弧 ¥[ 左括弧 ¥] 右括弧 ¥' シングルクオーテーション ¥" ダブルクオーテーション ¥nnn 8 進数表記 ¥xnn 16 進数表記
エスケープシーケンスは、ダブルクオーテーションで囲まれた文字列の場合にのみ意味を持つ。
例えば、以下のように使用する。
print "こんにちは¥n";
print "名前は¥"伊藤¥"です"; // ダブルクオーテーションで囲まれた文字列の中で"を出力する場合
また、ダブルクオーテーションで囲まれた文字列の中で¥文字を出力する場合、¥¥
と記述する。
※注意
シングルクオーテーションで囲まれた文字列の中でも、以下の2つだけはエスケープシーケンスとして扱われる。
¥' シングルクオーテーション ¥¥ ¥文字
print '出身地は¥'大阪¥'です';
変数展開
文字列をダブルクオーテーションで囲む場合やヒアドキュメントの場合、文字列に変数が存在する時、変数は格納されている値に置換される。
このような処理を変数展開と呼ぶ。
以下の例では、文字列に変数nameが記述されている。
この文字列を出力する時、"こんにちは。高橋 さん"と変数に格納されている値に置き換えて出力される。
$name = '高橋';
echo "こんにちは。$name さん";
変数展開において、変数が記述された位置の後ろにアルファベットが続く場合は、どこまでが変数名なのか区別できない場合がある。
以下の例では、変数colornamecolorを変数展開されてしまう。
$colorname = 'red';
echo "frame is $colornamecolor";
このように、どこまでが変数名なのか区別できない場合や配列変数等を使用する場合は、変数名を{}
で囲んで記述する。
$colorname = 'red';
echo "frame is ${colorname}color";
※注意
シングルクオーテーションで囲んだ文字列で変数を記述しても、変数展開は行われない。
英字の判別(ctype_alpha関数, ctype_alnum関数)
ctype_alpha
関数は、文字列に英字のみが含まれているかどうかを確認する。
boolean ctype_alpha(string text) 引数の文字列に英字だけが含まれているかどうかを確認します。 英字はa~z、A~Zである。 英字のみの文字列の場合はTRUE、英字以外が含まれている場合はFALSEを返す。 引数 text 調べる文字列 戻り値 文字列が全て英字である場合はTRUE、それ以外の場合はFALSEを返す。
ctype_alnum
関数は、英字と数字のみが含まれているかを確認する。
boolean ctype_alnum(string text) 引数の文字列に、英字と数字のみが含まれているかを確認する。 英字はa~z、A~Z、数字は0~9である。 英字と数字のみの文字列の場合はTRUE、英字と数字以外が含まれている場合はFALSEを返す。 引数 text 確認する文字列 戻り値 文字列が全て英字と数字である場合はTRUE、それ以外の場合はFALSEを返す。
<?php
$input_data = $_GET['text1'];
function dispKekka($str)
{
$kekka1 = ctype_alpha($str);
$kekka2 = ctype_alnum($str);
print('調べる文字列は'.$str.'です<br>');
if($kekka1 == TRUE)
{
print('文字列は英字だけが含まれています<br><br>');
}
else
{
if($kekka2 == TRUE)
{
print('文字列は英字及び数字だけが含まれています<br><br>');
}
else
{
print('文字列は英数字以外の文字が含まれています<br><br>');
}
}
}
$str = 'abcdef';
dispKekka($str);
$str = 'abc@def';
dispKekka($str);
$str = 'abc654def';
dispKekka($str);
?>
数字の判別(ctype_digit関数)
ctype_digit関数は、文字列に数字のみが含まれているかを確認する。
boolean ctype_digit(string text) 文字列に数字だけが含まれているかを確認する。 数字のみの場合はTRUE、数字以外が含まれている場合はFALSEを返す。 引数 text 調べる文字列 戻り値 文字列が全て数字の場合はTRUE、それ以外の場合はFALSEを返す。
※注意
小数点等が含まれている場合もFALSEとなる。この関数では、全ての文字が0~9である必要がある。
引数に指定した値が、数値または数値として有効な文字列かどうかを判別する場合は、
数字または数値文字列の判別(is_numeric関数)セクションを参照すること。
<?php
function dispKekka($str)
{
$bRet = ctype_digit($str);
print('調べる文字列は'.$str.'です<br>');
if($bRet)
{
print('文字列は数字だけが含まれています<br><br>');
}
else
{
print('文字列は数字以外の文字が含まれています<br><br>');
}
}
$str = '01234';
dispKekka($str);
$str = 'abc998';
dispKekka($str);
$str = '123.45';
dispKekka($str);
?>