LoginSignup
1

More than 5 years have passed since last update.

PHP preg_match正規表現(投稿フォーム)

Last updated at Posted at 2017-02-13

preg_replace

preg_replace(検索パターン,変更後の文字列,検索・置換対象)

例1
$test = 'helloworld';
echo preg_replace('/hello/', 'world', $test);
echo $test;
例1実行結果
worldworldhelloworld
例2
$a = 'applebananastrawbelly';
echo 'fruits→',preg_replace('/apple/', '', $a);
例2実行結果
fruitsbananastrawbelly

検索パターンが2つの場合

preg_replace(検索パターン1|検索パターン2,変更後の文字列,検索・置換対象)

検索パターンが2つの例
$a = 'applebananastrawbellygrape';
echo 'fruits→',preg_replace('/apple|strawbelly/', '', $a);
検索パターンが2つの例実行結果
fruitsbananagrape 
例3
$member=<<<_DATA_
<pre>
Name    Addr      Sex
-------------------------
Ito     Tokyo     man
Sato    Saitama   woman
Tanaka  Kanagawa  man
Uchida  Chiba     woman
</pre>
_DATA_;
print preg_replace('/man|woman/', '[Secret]', $member);
例3実行結果
Name    Addr      Sex
-------------------------
Ito     Tokyo     [Secret]
Sato    Saitama   [Secret]
Tanaka  Kanagawa  [Secret]
Uchida  Chiba     [Secret]

<<<→ヒアドキュメント

<<< → ヒアドキュメント
PHPにおける「<<<」は
ヒアドキュメントといいます。
PHPのプログラムの中にHTMLを埋め込んだりするときには重宝するでしょう。

<<<に続くID(終端子)が出現するまでを一括りの文字列として管理します。
似たような構文としてNowDocがありますのでIDの設定にはきをつけてください。

<<<TEST
文字
TEST;

TESTの部分の名前は自由

preg_match

     
^ 行頭
[0-9] 0から9までの数字1文字
{7} 直前の文字が7文字続く
$ 行末

■/正規表現パターン/
/~/で囲む。

文字列がカタカナとスペースのみであるかどうかを判定する関数

if (! preg_match ("/^[ァ-ヶー\s]+$/u", $_POST ['kanaIndicating'] ) && ! strlen ( $_POST ['kanaIndicating'] ) == 0) {
    $err ['kanaIndicating'] = 'カタカナで入力してください。';
}

郵便番号正規表現

postcode-input.php
<p>7桁の郵便番号をハイフンなしで入力してください</p>
<form action="postcode-output.php" method="post">
<input type="text" name="postcode">
<input type="submit" value="確定">
</form>
postcode-output.php
<?php
$postcode = $_POST['postcode'];
if(preg_match('/^[0-9]{7}$/', $postcode) & !($postcode == null)){
    echo $postcode,'を確認しました';
}else{
    echo $postcode,'は適切な郵便番号ではありません。';
}
?>

20170428.png

いずれかの文字にマッチ

word-input.php
<form action="word-output.php" method="post">
<input type="text" name="word">
<input type="submit" value="確定">
</form>

ABCのいずれかの文字にマッチ

word-output.php
<?php
$word = $_POST['word'];
if(preg_match('/[ABC]/', $word)){
    echo 'ok';
}else{
    echo 'NG';
}
?>

いずれかの文字にマッチしない

preg_match('/[^ABC]/', $word)

/a[cde]/

ac adv ae kadf→ok
aの次の文字がcかdかeが含まれている文字列はok

preg_match('/a[cde]/', $word)

全て数字

行頭から行末まで全て数字ならマッチ

preg_match('/^[0-9]$/', $word)

行頭だけ数字

preg_match('/^[0-9]/', $word)

行末だけ数字

preg_match('/[0-9]$/', $word)

半角全角数字にマッチ(正)

半角全角数字にマッチ(空欄はノーマッチ)方法①
preg_match('/^[0-90-9]+$/u', $word)
半角全角数字にマッチ(空欄はノーマッチ)方法②
preg_match('/^[0-90-9]$/u', $word)

半角全角数字にマッチ(誤)

間違った例
preg_match('/^.*[0-90-9]$/', $word)
間違った例
preg_match('/^.*[0-90-9]$/u', $word)

/p.n/

preg_match('/p.n/', $word)

pen pan pin → ok
piiiin → NG

数字が含まれていればマッチ

preg_match('/[0-9]/', $word)

500yen → ok
a → NG

アルファベットが含まれていればマッチ

preg_match('/[a-e]/', $word)

X{n}→n文字のX

n文字のX

preg_match('/e{2}/', $word)

X{m,n}→m~n文字のX

preg_match('/^we{1,2}k$/', $word)

week wek weeek → ok
sweek → NG

X{n,}→n文字以上のX

preg_match('/we{1,}k/', $word)

wek week aweek → ok
wk → NG

X+→1文字以上のX

例1
preg_match('/^a+$/', $word)

aaa aa a → ok

例2
preg_match('/wo+d/', $word)

wod wood → ok
wd oo → NG

a|b → a又はb

Girl又はBとyの間に任意の1文字を含む文字列。

preg_match('/Girl|B.y/', $word)

Girl qqBoytr → ok
By → NG

[^amr] → amrの文字にマッチしない

preg_match('/^we[^amr]k$/', $word)

weqk week → ok
wek weka weak → NG

\d → 数値にマッチ

preg_match('/\d/', $word)

1a 1 → ok
a → NG

\D → 数値以外にマッチ

preg_match('/\D/', $word)

a → ok
1 → NG

X?→ 0又は1文字のX

preg_match('/we?k/', $word)

wek wk→ ok
week a weeek→ NG

X* → 0文字以上のX

preg_match('/we*k/', $word)

wk wek week → ok
k → NG

\W → 文字以外にマッチ

preg_match('/w\Wk/', $word)

w?k w$k → ok
wk wek w1k → NG

\w → 大文字/小文字のアルファベット、数値、アンダースコアにマッチ

[a-zA-Z_0-9]と同じ

preg_match('/\w/', $word)

1(小文字) a _ → ok
あ 1(大文字) # → NG

[a-zA-Z_0-9]

preg_match('/[a-zA-Z_0-9]/', $word)

1(小文字) a _ → ok
あ 1(大文字) # → NG

- → ハイフンを指定する時はバックスラッシュ

preg_match('/w[\-]k/', $word)

w-k → ok
wk wak → NG

[a-z] → 小文字英字にマッチ

preg_match('/w[a-z]k/', $word)

wak → ok
wAk wk w1k → NG

[^a-z] →小文字英字以外にマッチ

preg_match('/[^a-z]/', $word)

1 → ok
a → NG

[A-Z] → 大文字英字にマッチ

preg_match('/[A-Z]/', $word)

A → ok
a → NG

/[a-z]-\d{3}/

preg_match('/[a-z]-\d{3}/', $word)

/[a-z]-\d{3}/でもよい。
a-111 → ok
a111 a-11 W-1→ NG

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1