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

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

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

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

Q&A

4回答

1081閲覧

PHPでの正規表現について

msssss

総合スコア64

PHP

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

0グッド

1クリップ

投稿2020/04/29 15:37

PHPの正規表現で、ANDを実装する方法を教えてください。

[a-z and 0-9]みたいな感じです

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

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

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

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

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

m.ts10806

2020/04/29 19:55

まず自身が思ったように組んでみるところからです。丸投げです。 調べたこと試したことを記載してください。
msssss

2020/04/29 23:47

りょーかい
退会済みユーザー

退会済みユーザー

2020/04/30 01:49 編集

例えば i という文字は a-z の範囲内に含まれますが、0-9 の範囲内には含まれません。AND すると成り立たなくなるので普通はORで結合するよねって解釈しますが、それでもANDなんですか? って考えると maisumakunさんの回答一択になってしまいます。もう少し具体例を示して、こういうふうにしたいって説明を加えると、そもそもの説明の誤りに気づきやすくなるかと思うのですが。
msssss

2020/04/30 02:43

会員登録サイトでパスワードの入力値を半角英語と半角数字の両方を必ず含めるようにしたいのでandが必須です
m.ts10806

2020/04/30 02:49

だとしたら「半角英字、半角数字 いずれも1文字以上」という要件になると思います。
退会済みユーザー

退会済みユーザー

2020/04/30 02:57

うん、それならわかる。伝え方でできることもできないなんて話に転んでしまう。
退会済みユーザー

退会済みユーザー

2020/04/30 02:59

「aあ1」なんて文字列も、「半角英字、半角数字 いずれも1文字以上」に該当するけど、パスワードとしてはダメな気がするので、もうちょっと要件を明確にしたい。
m.ts10806

2020/04/30 03:28

「半角英数のみで構成されている」 且つ 「英数字いずれも1文字以上含んでいる」 とチェックを分けたほうが簡単そうですけどね。なんなら英数も分けていいくらい。 「英字が一文字以上ある」且つ「数字が一文字以上ある」 で、ひとつでもfalseならエラー。 正規表現こねくり回しすぎるのも保守性失うだけですし。メンテナンスもしづらくなる。
guest

回答4

0

[a-z and 0-9]みたいな感じです

どちらも満たす文字は1文字も存在しませんので、仮に範囲のandを取れたとしても、何もヒットしません。

投稿2020/04/29 23:09

maisumakun

総合スコア146018

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

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

0

/[0-9].*[a-z]|[a-z].*[0-9]/

投稿2020/04/30 01:27

yambejp

総合スコア116720

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

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

0

下記のコードで実現可能かと思います。

Regex

1^(?=.*[0-9])(?=.*[A-z])
説明

(?=pattern)は「肯定先読」と呼ばれ、
foo(?=bar)とすると、fooならびにbarの両方を含んでいる場合にのみマッチします。

^(?=.*[0-9])(?=.*[A-z])とした場合、
Ab12 9z q4D998Ed などがマッチします。

補足

ANDの条件を増やす場合には、下記のように記述します。

Regex

1^(?=.*[0-9])(?=.*[A-z])(?=.*追加)

追加Ab12 9追加z q4D追加998Ed などがマッチします。


コードの確認は、以下のサイトにて行いました。
https://php-regexp.a-zumi.net/

投稿2020/04/29 16:13

編集2020/04/29 16:23
退会済みユーザー

退会済みユーザー

総合スコア0

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

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

0

~~質問の意図を誤解しているかもしれませんが、

Regex

1[a-z0-9]

ではダメですか?~~

コメントにある通り、上記は OR になってしまうので間違っていました。

kotone.h さんの回答が正解になりそうですが、

を参考に以下のような正規表現を組みました。

/\A(?=.?[a-z])(?=.?[0-9])[a-z0-9]+\z/

なお、私がチェックに使ったツールは、以下のページです。

PHP: preg_match() / JavaScript: match() 正規表現チェッカー ver3.1
http://okumocchi.jp/php/re.php

投稿2020/04/29 15:39

編集2020/04/29 23:14
Yasumichi

総合スコア1773

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

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

msssss

2020/04/29 15:44

これだと、a-zまたは0-9が含まれればtrueになってしまいます。 なので、今回はa-zかつ0-9が含まれればtrue、どちらかが含まれなければfalseにしたいです
Yasumichi

2020/04/29 15:56

なるほど、そういうことですか。PHP で使えるかは分かりませんが、次の記事を参考にしてみてはいかがでしょうか。 [正規表現:AND(かつ)の表現方法 | WWWクリエイターズ](http://www-creators.com/archives/5332)
Yasumichi

2020/04/29 17:09

kotone.h さんの回答が正解になりそうですが、 言語別:パスワード向けの正規表現 - Qiita https://qiita.com/mpyw/items/886218e7b418dfed254b を参考に以下のような正規表現を組みました。 /\A(?=.*?[a-z])(?=.*?[0-9])[a-z0-9]+\z/
Yasumichi

2020/04/29 17:11

なお、私がチェックに使ったツールは、以下のページです。 PHP: preg_match() / JavaScript: match() 正規表現チェッカー ver3.1 http://okumocchi.jp/php/re.php
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問