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

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

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

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

正規表現

正規表現とは特定の文字列によるパターンマッチングを行う際に用いられる宣言型プログラミングです。

Q&A

解決済

1回答

6370閲覧

アンダースコア及び、半角英数のみの正規表現

toll_tree

総合スコア199

PHP

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

正規表現

正規表現とは特定の文字列によるパターンマッチングを行う際に用いられる宣言型プログラミングです。

0グッド

1クリップ

投稿2019/04/20 23:29

編集2019/04/21 00:16

PHPの正規表現で、アンダースコアのみ、もしくは半角英数のみ、もしくは、アンダースコア含む半角英数字で、最低3文字から、15文字で、指定したいのですが、どのように記載すればよろしいでしょうか?
教えて頂けましたら、幸いです。よろしくお願いします。

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

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

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

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

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

maisumakun

2019/04/20 23:30

アンダースコアとハイフンは、「どちらかが入っていればOK」なのでしょうか、それとも「両方が必要」なのでしょうか?
toll_tree

2019/04/20 23:33 編集

あ、いえ、どちらも入っていなくて大丈夫なのですが、アンダースコア、ハイフン、半角英数以外の入力を弾く正規表現を教えて頂きたいです。
maisumakun

2019/04/20 23:33

はたまた、「アンダースコアやハイフンがなくても問題ない」のでしょうか?
toll_tree

2019/04/20 23:35

はい。なくても、問題がないものになります。 しかし、今思っていたのですが、アンダースコアや、ハイフンのみの入力になってしまいますと、問題ですし、最低、半角英数の文字を数文字含むようにした方が良い気がしてきました...
toll_tree

2019/04/20 23:37

実は、ツイッターのIDに設定できる、感じにしたかったのですが、もう少し、きちんと考えてから質問するべきでした...
m.ts10806

2019/04/20 23:45

要件ももう少し具体的にされたほうが良いかもしれませんね。パターンもあります。そしたら自身でもある程度やってみることも可能だったかもしれない。 要件なので仕様部分となり質問者さん側で決める必要があるところですので
toll_tree

2019/04/20 23:47

そうですね...この質問は、取り敢えず、自己解決のような形にし、削除申請をかけた方が良いでしょうか?
m.ts10806

2019/04/20 23:49

いえ、要件詰めなおして質問に追記されると良いです
toll_tree

2019/04/21 00:17

本文、修正致しました。
m.ts10806

2019/04/21 02:06

複数の制限をかけることになると思いますがちなみにご自身で書いてみたコードや調べたことはありますか? そちらをご提示いただけると質問者さんの考えてる方向性とかどこでつまずいているかも分かりやすくなるのでアドバイスもしやすくなります
toll_tree

2019/04/21 08:51

ご指摘ありがとうございます。 その後、調べていたのですが、「'/^[A-Za-z0-9_]{3,15}$/'」こちらの正規表現で、実現可能ということが分かりました。
guest

回答1

0

ベストアンサー

php

1<?php 2$alphanumdashunder = "/^[-_a-zA-Z0-9]{3,15}$/"; 3$containsAlphaNum = "/.*[0-9a-zA-Z].*/"; 4$subject = "---"; 5var_dump(preg_match ( $alphanumdashunder , $subject ) && preg_match ( $containsAlphaNum , $subject ));

正規表現で一発で求めようとするとそれなりの技能が必要で(これはメンテナンスする人にも求められるという意味です)、私は分からないので分割しました。
「英数字と‐_だけで構成されている」は正規表現が最適ですが、英字が含まれているといったパスワード要件的なものは、strposでやったほうが、可読性の点からよいのではないでしょうか?
(単に文字が含まれる、はpreg_matchよりstrposが計算負荷的にも有利です)

今回のような複合要件なら、strlenにヘルパ関数としてisConsistFromAlphaNum()containsApha()を作ってアンドオアを組合せていくと、今後条件を再検討したときにメンテナンサブルになりそうな気がします。

投稿2019/04/21 03:13

編集2019/04/21 15:51
papinianus

総合スコア12705

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

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

toll_tree

2019/04/21 08:54

ご回答ありがとうございます。 もしかしたら、自分の質問の仕方に問題があったのかもしれないのですが、色々調べてみましたら「'/^[A-Za-z0-9_]{3,15}$/'」こちらの正規表現で解決できることが分かりました。
papinianus

2019/04/21 15:54

ご自身が解決できたんなら解決できたでいいんじゃないですかね。自己解決回答してBAつければ。 ハイフンが許容されてないし、ハイフンだけ3つを許容してしまうし、質問本文や質疑コメントで言ってきたことと違う結論ですが。 そういう、自分でも何が正しい制限か分からない煮詰め切れてない試行錯誤を正規表現という自分でハンドリングできない技法で実施すべきじゃないよね、っていうのが私の回答なんで、マイナスするなり無視するなりしてください
toll_tree

2019/04/22 04:35

すみません。自分の質問の仕方に問題があったと反省しております。 >正規表現という自分でハンドリングできない技法で実施すべきじゃない 正規表現以外の方法というのは、選択しから除外してしまっていました... 自分でも理解できていない、正規表現を使用するのは確かに、良くないですよね...
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問