PHP preg_match 全角半角の数字のみ
- 評価
- クリップ 0
- VIEW 6,619
PHP、preg_matchでわからないとこがあります。
全角半角の数字のみマッチさせたいので、
preg_match('/^[0-90-9]$/', $word)){
としたらできず、
preg_match('/^.*[0-90-9]$/', $word)
としたらできました。
なぜでしょう??
.*はなんでしょうか?
<?php require 'header.php';?>
<form action="word-output.php" method="post">
<input type="text" name="word">
<input type="submit" value="確定">
</form>
<?php require 'footer.php';?>
<?php require 'header.php';?>
<?php
$word = $_POST['word'];
// if(preg_match('/^[0-90-9]$/', $word)){
if(preg_match('/^.*[0-90-9]$/', $word)){
echo 'ok';
}else{
echo 'NG';
}
?>
<?php require 'footer.php';?>
-
気になる質問をクリップする
クリップした質問は、後からいつでもマイページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
クリップを取り消します
-
良い質問の評価を上げる
以下のような質問は評価を上げましょう
- 質問内容が明確
- 自分も答えを知りたい
- 質問者以外のユーザにも役立つ
評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。
質問の評価を上げたことを取り消します
-
評価を下げられる数の上限に達しました
評価を下げることができません
- 1日5回まで評価を下げられます
- 1日に1ユーザに対して2回まで評価を下げられます
質問の評価を下げる
teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。
- プログラミングに関係のない質問
- やってほしいことだけを記載した丸投げの質問
- 問題・課題が含まれていない質問
- 意図的に内容が抹消された質問
- 過去に投稿した質問と同じ内容の質問
- 広告と受け取られるような投稿
評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。
質問の評価を下げたことを取り消します
この機能は開放されていません
評価を下げる条件を満たしてません
質問の評価を下げる機能の利用条件
この機能を利用するためには、以下の事項を行う必要があります。
- 質問回答など一定の行動
-
メールアドレスの認証
メールアドレスの認証
-
質問評価に関するヘルプページの閲覧
質問評価に関するヘルプページの閲覧
+6
いくつも問題があります(他の人が指摘していない部分に絞りました)。
- 全角文字を
preg_xxx
で処理したい場合、正規表現をUTF-8モードにする必要があります。/.../u
と、最後にu
を入れましょう。 - 文字クラス内の全角ハイフンはただの文字です。
0-9
ではなく、0-9
とする必要があります。
投稿
-
回答の評価を上げる
以下のような回答は評価を上げましょう
- 正しい回答
- わかりやすい回答
- ためになる回答
評価が高い回答ほどページの上位に表示されます。
-
回答の評価を下げる
下記のような回答は推奨されていません。
- 間違っている回答
- 質問の回答になっていない投稿
- スパムや攻撃的な表現を用いた投稿
評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。
+4
.は任意の1文字
*は0回以上の繰り返し
ですが。
正規表現の表記法の説明に、これらはちゃんと書いてあります。
http://php.net/manual/ja/reference.pcre.pattern.syntax.php
逐一質問していたらいつまでも自分で学ぶことが出来ないエンジニアに育ってしまいますので、自分で出来るところまでは調べてみるクセを付けた方が良いと思います。
投稿
-
回答の評価を上げる
以下のような回答は評価を上げましょう
- 正しい回答
- わかりやすい回答
- ためになる回答
評価が高い回答ほどページの上位に表示されます。
-
回答の評価を下げる
下記のような回答は推奨されていません。
- 間違っている回答
- 質問の回答になっていない投稿
- スパムや攻撃的な表現を用いた投稿
評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。
-
この投稿は削除されました
+4
大文字小文字の数字のみマッチさせたいので、
そもそも倍角の数字を大文字とはいいわないですよね?
'/^[0-90-9]$/'
は、先頭から末尾までの間に数字が1つだけ出現するという意味で
'/^.*[0-90-9]$/'
ですと、(数字を含む)なにか適当な文字ではじまって末尾の文字が数字
という意味になります。そういう意味では「'/[0-90-9]$/'」と同意で
命題とは異なります。
せめてこうして下さい
'/^[0-90-9]+$/' → '/^[0-90-9]+$/'
※ハイフン修正しました
投稿
-
回答の評価を上げる
以下のような回答は評価を上げましょう
- 正しい回答
- わかりやすい回答
- ためになる回答
評価が高い回答ほどページの上位に表示されます。
-
回答の評価を下げる
下記のような回答は推奨されていません。
- 間違っている回答
- 質問の回答になっていない投稿
- スパムや攻撃的な表現を用いた投稿
評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。
+4
https://3v4l.org/b7skh
<?php
function chk($word) {
echo PHP_EOL . 'Word: ' . $word . PHP_EOL;
echo 'pattern: 1.' . PHP_EOL;
if (preg_match('/^.*[0-90-9]$/u', $word)) {
echo 'Ok.' . PHP_EOL;
}
else {
echo 'Ng.' . PHP_EOL;
};
echo 'pattern: 2.' . PHP_EOL;
if (preg_match('/^[0-90-9]+$/u', $word)) {
echo 'Ok.' . PHP_EOL;
}
else {
echo 'Ng.' . PHP_EOL;
};
}
chk('abc12345');
chk('abc12345');
chk('12345');
chk('12345');
chk('1122334455');
半角数字のみということであれば。
https://3v4l.org/8C3lC
<?php
function chk($word) {
echo PHP_EOL . 'Word: ' . $word . ' - ';
if (preg_match('/^[0-9]+$/u', $word)) {
echo 'Ok.' . PHP_EOL;
}
else {
echo 'Ng.' . PHP_EOL;
};
}
chk('abc12345');
chk('abc12345');
chk('12345abc');
chk('12345abc');
chk('12345');
chk('12345');
chk('1122334455');
chk('12.345');
正規表現パターンは追々学習していけばよいかと。
投稿
-
回答の評価を上げる
以下のような回答は評価を上げましょう
- 正しい回答
- わかりやすい回答
- ためになる回答
評価が高い回答ほどページの上位に表示されます。
-
回答の評価を下げる
下記のような回答は推奨されていません。
- 間違っている回答
- 質問の回答になっていない投稿
- スパムや攻撃的な表現を用いた投稿
評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。
+3
全角半角の数字のみだけで成り立っているか?という判断をしたいなら、
/^[0-90-9]+$/
じゃないですかね?
$wordに文字がない時も許可するなら/^[0-90-9]*$/
ですね?
投稿
-
回答の評価を上げる
以下のような回答は評価を上げましょう
- 正しい回答
- わかりやすい回答
- ためになる回答
評価が高い回答ほどページの上位に表示されます。
-
回答の評価を下げる
下記のような回答は推奨されていません。
- 間違っている回答
- 質問の回答になっていない投稿
- スパムや攻撃的な表現を用いた投稿
評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。
0
スラッシュは範囲、キャレットは文頭、ドルは文末、カギカッコ内は連番。
しか覚えてないですがチェックツールがwebサービスで合った気がします。
投稿
-
回答の評価を上げる
以下のような回答は評価を上げましょう
- 正しい回答
- わかりやすい回答
- ためになる回答
評価が高い回答ほどページの上位に表示されます。
-
回答の評価を下げる
下記のような回答は推奨されていません。
- 間違っている回答
- 質問の回答になっていない投稿
- スパムや攻撃的な表現を用いた投稿
評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。
15分調べてもわからないことは、teratailで質問しよう!
- ただいまの回答率 88.36%
- 質問をまとめることで、思考を整理して素早く解決
- テンプレート機能で、簡単に質問をまとめられる
質問への追記・修正、ベストアンサー選択の依頼
kei344
2017/05/09 12:39
「大文字小文字」ではなく「全角半角」では?
marimokomokmOk
2017/05/09 13:32
修正しました。ありがとうございます。