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


##**preg_replace**
**<font color="red">preg_replace(検索パターン,変更後の文字列,検索・置換対象)</font>**

```php:例1
$test = 'helloworld';
echo preg_replace('/hello/', 'world', $test);
echo $test;
```

```php:例1実行結果
worldworldhelloworld
```

```php:例2
$a = 'applebananastrawbelly';
echo 'fruits→',preg_replace('/apple/', '', $a);
```


```php:例2実行結果
fruits→bananastrawbelly
```

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

```php:検索パターンが2つの例
$a = 'applebananastrawbellygrape';
echo 'fruits→',preg_replace('/apple|strawbelly/', '', $a);
```

```php:検索パターンが2つの例実行結果
fruits→bananagrape 
```

```php:例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);
```

```php:例3実行結果
Name    Addr      Sex
-------------------------
Ito     Tokyo     [Secret]
Sato    Saitama   [Secret]
Tanaka  Kanagawa  [Secret]
Uchida  Chiba     [Secret]
```

###**<<<→ヒアドキュメント**
<font color="red">**<<<**</font> →　ヒアドキュメント
PHPにおける「<<<」は
[ヒアドキュメント](http://php.net/manual/ja/language.types.string.php#language.types.string.syntax.heredoc)といいます。 
PHPのプログラムの中にHTMLを埋め込んだりするときには重宝するでしょう。 

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

**<<<_TEST_
文字
_TEST_;**
TESTの部分の名前は自由



##**preg_match**

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

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


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

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

###**郵便番号正規表現**

```php:postcode-input.php
<p>7桁の郵便番号をハイフンなしで入力してください。</p>
<form action="postcode-output.php" method="post">
<input type="text" name="postcode">
<input type="submit" value="確定">
</form>
```

```php:postcode-output.php
<?php
$postcode = $_POST['postcode'];
if(preg_match('/^[0-9]{7}$/', $postcode) & !($postcode == null)){
	echo $postcode,'を確認しました';
}else{
	echo $postcode,'は適切な郵便番号ではありません。';
}
?>
```
![20170428.png](https://qiita-image-store.s3.amazonaws.com/0/95187/d2247c62-5091-cbd7-e0e0-4699e55a05b9.png)

###**いずれかの文字にマッチ**

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

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

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

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

```php:
preg_match('/[^ABC]/', $word)
```
###**/a[cde]/**
ac adv ae kadf→ok
aの次の文字がcかdかeが含まれている文字列はok

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

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

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

###**行頭だけ数字**

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

###**行末だけ数字**

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

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

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

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

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

```php:間違った例
preg_match('/^.*[0-9０-９]$/', $word)
```



```php:間違った例
preg_match('/^.*[0-9０-９]$/u', $word)
```



###**/p.n/**

```php:
preg_match('/p.n/', $word)
```

pen pan pin → ok
piiiin →　NG

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

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

500yen　→　ok
a →　NG

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

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

###**X{n}→n文字のX**
n文字のX

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

###**X{m,n}→m～n文字のX**

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

week wek weeek → ok
sweek → NG

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

```php:
preg_match('/we{1,}k/', $word)
```
wek　week aweek → ok
wk　→ NG

###**X+→1文字以上のX**

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

aaa aa a　→ ok

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

wod wood →　ok
wd oo → NG

###**a|b → a又はb**
Girl又はBとyの間に任意の1文字を含む文字列。


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

Girl qqBoytr → ok
By →　NG

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

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

weqk week → ok
wek weka weak → NG

###**\d → 数値にマッチ**

```php:
preg_match('/\d/', $word)
```

1a 1 → ok
a → NG

###**\D → 数値以外にマッチ**

```php:
preg_match('/\D/', $word)
```

a → ok
1 → NG

###**X?→ 0又は1文字のX**

```php:
preg_match('/we?k/', $word)
```

wek wk→ ok
week a weeek→ NG

###**X* → 0文字以上のX**

```php:
preg_match('/we*k/', $word)
```

wk wek week → ok
k → NG

###**\W → 文字以外にマッチ**

```php:
preg_match('/w\Wk/', $word)
```

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

###**\w → 大文字/小文字のアルファベット、数値、アンダースコアにマッチ**
**[a-zA-Z_0-9]と同じ**

```php:
preg_match('/\w/', $word)
```

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

###**[a-zA-Z_0-9]**
```php:
preg_match('/[a-zA-Z_0-9]/', $word)
```

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

###**\- → ハイフンを指定する時はバックスラッシュ**
```php:
preg_match('/w[\-]k/', $word)
```

w-k → ok
wk wak → NG

###**[a-z] → 小文字英字にマッチ**
```php:
preg_match('/w[a-z]k/', $word)
```
wak → ok
wAk wk w1k → NG

###**[^a-z] →小文字英字以外にマッチ**
```php:
preg_match('/[^a-z]/', $word)
```
1 → ok
a → NG

###**[A-Z] → 大文字英字にマッチ**
```php:
preg_match('/[A-Z]/', $word)
```
A → ok
a → NG

###**/[a-z]-\d{3}/**
```php:
preg_match('/[a-z]-\d{3}/', $word)
```
/[a-z]\-\d{3}/でもよい。
a-111 → ok
a111 a-11 W-1→ NG