13/01/29 08:17:24.91
せめて同じ文字はまとめるか
^(ば(か|っか|ーか))
14:nobodyさん
13/02/10 11:51:32.02 m9q+FHWZ
パスワードの登録で
半角アルファベットと半角数字の組み合わせで8文字以上
という条件を考えてるんですが、以下じゃダメですよね?
preg_match('/^[a-zA-z0-9]{8,}$/', $s);
アルファベットと数字の組み合わせ(アルファベットも数字もどちらもある)とするには
どうしたら良いでしょうか?
15:nobodyさん
13/02/10 12:46:13.25
>>14みたいな正規表現のちょっとしたテクニック集とかどっかにまとまってないかね?
16:nobodyさん
13/02/13 23:30:20.10
/^(?=(.*\d[a-zA-Z].*)|(.*[a-zA-Z]\d.*))\w{8,}$/
数字英字 もしくは 英字数字という並びが存在する英数字8文字以上
17:nobodyさん
13/02/14 00:13:02.40
>>16を1回チェックするのと、
>>14と「英字を含む」「数字を含む」の計3回チェックするのとで、どのくらい
ここまで書いたところで自分でいろいろ試してみた。
$s = '3066058kczgr9784685fwn874fos847fos8djtkcrzu9q58nzfc';
for($i=0; $i<1000000 && preg_match('/^(?=(.*\d[a-zA-Z].*)|(.*[a-zA-Z]\d.*))\w{8,}$/', $s); $i++){} //2.3948659897 sec.
for($i=0; $i<1000000 && preg_match('/^[a-zA-z0-9]{8,}$/', $s) && preg_match('/[a-zA-z]/', $s) && preg_match('/[0-9]/', $s); $i++){} //5.7406949997 sec.
for($i=0; $i<1000000 && preg_match('/^[a-zA-z0-9]{8,}$/', $s) && !preg_match('/^[0-9]+$/', $s); $i++){} //3.9960801601 sec.
for($i=0; $i<1000000 && 8<=strlen($s) && ctype_alnum($s) && !ctype_digit($s); $i++){} //2.2285568714 sec.
$s = '1';
for($i=0; $i<1000000 && preg_match('/^(?=(.*\d[a-zA-Z].*)|(.*[a-zA-Z]\d.*))\w{8,}$/', $s); $i++){} //0.0000748634 sec.
for($i=0; $i<1000000 && preg_match('/^[a-zA-z0-9]{8,}$/', $s) && preg_match('/[a-zA-z]/', $s) && preg_match('/[0-9]/', $s); $i++){} //0.0000240803 sec.
for($i=0; $i<1000000 && preg_match('/^[a-zA-z0-9]{8,}$/', $s) && !preg_match('/^[0-9]+$/', $s); $i++){} //0.0000209808 sec.
for($i=0; $i<1000000 && 8<=strlen($s) && ctype_alnum($s) && !ctype_digit($s); $i++){} //0.0000181198 sec.
おもしろかった。
18:nobodyさん
13/03/04 01:35:07.40
>>13
これはひどい
19:nobodyさん
13/03/09 22:12:30.87
^([a-z]|[A-Z]|[0-9]){8,}$
はダメ?
20:nobodyさん
13/03/09 23:24:50.86
ダメ
21:nobodyさん
13/03/10 23:50:57.56
>>19
大文字と小文字を区別したいってことなら
^(?=.*[A-Z])(?=.*[a-z])(?=.*[0-9])[A-Za-z0-9]{8,}$
でおk