C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[25]: パスワードの正規表現


(過去ログ 13 を表示中)

[トピック内 27 記事 (1 - 20 表示)]  << 0 | 1 >>

■2998 / inTopicNo.1)  パスワードの正規表現
  
□投稿者/ ASP.NET 初心者 (1回)-(2007/04/20(Fri) 14:52:34)

分類:[.NET 全般] 

こんにちは。ASP.NET 初心者です。

ユーザー登録画面でパスワードを入力するというような画面を作っているのですが、
RegularExpressionValidatorを使用して、検証をするというような仕様にしたいと
思っています。
デフォルトでCreateUserWizardStep等のコントロールを使用すると、パスワードは:
英数字と英数字1文字以外で7文字以上
という条件になると思います。

これを正規表現で書くことは可能でしょうか?あまり正規表現には詳しくないので、
可能であれば教えてください。
宜しくお願い致します。
引用返信 編集キー/
■2999 / inTopicNo.2)  Re[1]: パスワードの正規表現
□投稿者/ ぽぴ王子 (186回)-(2007/04/20(Fri) 15:02:39)
ぽぴ王子 さんの Web サイト
No2998 (ASP.NET 初心者 さん) に返信

> こんにちは。ASP.NET 初心者です。

個人的にこんな匿名っぽいハンドルはどうかとは思いますが。

> これを正規表現で書くことは可能でしょうか?あまり正規表現には詳しくないので、
> 可能であれば教えてください。

可能です。が、教えません。
詳しくないから全部教えてくれ、ではそれ以上詳しくなれないのではないですか?
詳しくないならば、なおさら自分で勉強すべきです。
その上で「ここのこういうところがわからないんだけど、どうすればえーのん?」
などと質問していただければ(いや、さすがにこんなくだけた文体で質問されても
困るけども)答えることはできると思います。

とりあえず「正規表現 繰り返し」で検索してみて出てきたページを書いておきます。
http://www4.ocn.ne.jp/~kaerume/k2e/regex_1.html
引用返信 編集キー/
■3000 / inTopicNo.3)  Re[2]: パスワードの正規表現
□投稿者/ ASP.NET 初心者 (2回)-(2007/04/20(Fri) 15:11:56)
すみません。
個人的には、正規表現については、ある程度基本は知っているつもりなのですが、
どうしても思いつかなかったので、ヒントだけでも…と思って投稿しました。

全部教えて欲しいと意図したつもりはなかったのですが、そのように伝わったのであれば
お詫びします。
引用返信 編集キー/
■3001 / inTopicNo.4)  Re[3]: パスワードの正規表現
□投稿者/ ASP.NET 初心者 (3回)-(2007/04/20(Fri) 15:26:47)
何度もすみません。
教えて頂いたサイトを見て思いついたのですが、
7文字以上という条件を除けば:
^(\w+\W+\w*|\W+\w+\W*)$
でいいと思うのですが、7文字以上という条件を付加するには
どうしたらいいんでしょうか?

ヒントだけでもお願いします。
引用返信 編集キー/
■3002 / inTopicNo.5)  Re[4]: パスワードの正規表現
□投稿者/ ぽぴ王子 (187回)-(2007/04/20(Fri) 15:34:53)
ぽぴ王子 さんの Web サイト
No3001 (ASP.NET 初心者 さん) に返信

> ^(\w+\W+\w*|\W+\w+\W*)$
> でいいと思うのですが、7文字以上という条件を付加するには
> どうしたらいいんでしょうか?

手元に環境がないのでちょっと試せませんが、{7,30} みたいな感じに
してみたらどうでしょう。
でも難しいかな。

自分で書いておいて何ですが、正規表現だと確かに難しいかも
しれないですね。
引用返信 編集キー/
■3003 / inTopicNo.6)  Re[5]: パスワードの正規表現
□投稿者/ 中博俊 (1041回)-(2007/04/20(Fri) 15:42:02)
中博俊 さんの Web サイト
7文字以上でしょ?
7回以上引っかかればいいんでしょ?

^[\w\W\d]{7}

でいけんじゃないの?
ベタうちなので、保証できません。
引用返信 編集キー/
■3004 / inTopicNo.7)  Re[6]: パスワードの正規表現
□投稿者/ ASP.NET 初心者 (4回)-(2007/04/20(Fri) 15:57:28)
ご返信ありがとうございました。

{7,30}
という風にしてしまうと、直前のパターンの7〜30回の繰り返しになってしまうので、
私の考えたパターンの後に付加すると(↓)無理のようです。
^(\w+\W+\w*|\W+\w+\W*){7,30}$

> ^[\w\W\d]{7}
このパターンだと、\wと\Wを[]の中に一緒に書いた時点で、任意の文字になってしまうようで、
できませんでした。

やはり、CustomValidatorのClientValidationFunctionプロパティを使用して、JavaScriptで書く
のがいいのでしょうか?
できなかったら、そうしようと思っていたのですが、もし正規表現で可能であれば…と思って
投稿してご意見を頂戴した次第です。

何か良い方法があれば、ご教授下さい。
引用返信 編集キー/
■3007 / inTopicNo.8)  Re[7]: パスワードの正規表現
□投稿者/ ぽぴ王子 (188回)-(2007/04/20(Fri) 17:05:19)
ぽぴ王子 さんの Web サイト
No3004 (ASP.NET 初心者 さん) に返信

> {7,30}
> という風にしてしまうと、直前のパターンの7〜30回の繰り返しになってしまうので、
> 私の考えたパターンの後に付加すると(↓)無理のようです。
> ^(\w+\W+\w*|\W+\w+\W*){7,30}$

この場合の * は「直前の文字の0個以上の繰り返し」だと思うので、こうしてみたら
どうでしょう。
^(\w+\W+\w{7,30}|\W+\w+\W{7,30})$

>>^[\w\W\d]{7}
> このパターンだと、\wと\Wを[]の中に一緒に書いた時点で、任意の文字になってしまうようで、
> できませんでした。

{7} でいいんでしたっけ?(と、これは中さん宛で)
RegularExpression の仕様がわからないのでなんとも言えませんが
手元の WZ Editor のヘルプでは、{7} は {7,7} と同じ意味になる
ということが書いてあります。
要するに7文字ぴったりじゃないとヒットしないのではないかと。

> やはり、CustomValidatorのClientValidationFunctionプロパティを使用して、JavaScriptで書く
> のがいいのでしょうか?

そのあたりはトレードオフでしょうね。
個人的にはあとから読んで頭を悩ませるような正規表現を書くならば
JavaScript で書いてしまえ派ではあります。
(簡単なのだったらいいのだけど)
正規表現にしておくと、サーバ側での処理も同じように書けるという
利点はありますが。
引用返信 編集キー/
■3008 / inTopicNo.9)  Re[8]: パスワードの正規表現
□投稿者/ ぼのぼの (37回)-(2007/04/20(Fri) 17:21:59)
こんにちは。ぼのぼのです。
まず要件を整理してみませう。

> 英数字と英数字1文字以外で7文字以上

この表現がイマイチわかりづらいですが、整理するとこういうことでしょうか?
(1)文字列長は7文字以上
(2)最低1文字以上の英数字を含む
(3)最低1文字以上の英数字以外を含む

これが正しいという前提で話を進めると、
(1)〜(3)すべてを一つの正規表現で済ませようとすると、
かな〜り複雑になっちゃいそうな気がします。

CustomValidatorを使うのも一つの手ですが、
RegularExpressionValidatorを2つ使用して、
(1)をチェックするモノと(2)&(3)をチェックするモノに分ければ、
各々の正規表現は単純化できるんではないでしょうか。
#エラーメッセージも2種類表示できます
引用返信 編集キー/
■3011 / inTopicNo.10)  Re[9]: パスワードの正規表現
□投稿者/ ASP.NET 初心者 (5回)-(2007/04/20(Fri) 17:44:52)
皆さん、アドバイスありがとうございました。

> {7} でいいんでしたっけ?(と、これは中さん宛で)
正しくは:
{7,}
ですね。勘違いされたのではと察します。

[ぼのぼのさん]
要件はおっしゃる通りです。
なるほど。2つ使ってしまえばいいんですね。眼からウロコです。
ValidatorControlを複数使うと*がずれるのが嫌で、どうかなぁ?と思っていたのですが、
最近、DisplayプロパティをDynamicにすれば解消されると知り、複数使うという手も
ありかなぁ…と考えています。

ぽぴ王子さんの言われる通り、確かに、これを正規表現でやろうと思うとトレードオフが
発生するような気がします。

ちなみに、先ほどJavaScriptを使ってみたら、上手くできました。
ソースは以下のような感じですが:

<script type="text/javascript">
<!--
function ValidatePassword(sender, e) {
minLength = 7;
var eValue = e.Value;
e.IsValid = ((eValue.length >= minLength) && eValue.match(/\w+/) && eValue.match(/\W+/));
}
//-->
</script>

正規表現の部分は、一つにまとめることもできますが、分かり易さを重視して2つにしました。

全ての条件を、正規表現で1つにまとめるような方法があればいいんですけどね…
何かいい方法があれば、ご教授下さい。
引用返信 編集キー/
■3020 / inTopicNo.11)  Re[10]: パスワードの正規表現
□投稿者/ 中博俊 (1043回)-(2007/04/20(Fri) 23:03:41)
中博俊 さんの Web サイト
7以上でも、7でもマッチすればいいんじゃないの?
ってか元質問の意味がわからんかった
引用返信 編集キー/
■3021 / inTopicNo.12)  Re[11]: パスワードの正規表現
□投稿者/ 囚人 (84回)-(2007/04/20(Fri) 23:15:57)
1つの正規表現では難しそうですね。
ところで、\w や \W は全角もマッチしたりする場合がありますがその辺は大丈夫ですか?
[a-zA-Z0-9]とやる方が個人的には安心できますね。

>英数字と英数字1文字以外で7文字以上

半角英数字と半角英数字以外の記号を1文字含んだ7文字以上
ってのが正しい仕様だったりしませんか?
引用返信 編集キー/
■3022 / inTopicNo.13)  Re[12]: パスワードの正規表現
□投稿者/ ASP.NET 初心者 (6回)-(2007/04/20(Fri) 23:32:38)
質問者です。
ご回答、ありがとうございます。

ぽぴ王子さん

> この場合の * は「直前の文字の0個以上の繰り返し」だと思うので、
> こうしてみたらどうでしょう。
> ^(\w+\W+\w{7,30}|\W+\w+\W{7,30})$

これだと「123456/」のような最後が英数字でないようなものが、はじかれてしまいます。
(「123456/」はパスワードとして通るようにしたいです。)

囚人さん

> 半角英数字と半角英数字以外の記号を1文字含んだ7文字以上
> ってのが正しい仕様だったりしませんか?

仕様はおっしゃる通りです。
\wや\Wが全角もマッチするということは、考えに入れていませんでした…。
ただ、今回はパスワードに関する正規表現なので、パスワードを入力するTextBox
そのものが半角しか受け付けていないので、大丈夫だと思います。

引用返信 編集キー/
■3023 / inTopicNo.14)  Re[13]: パスワードの正規表現
□投稿者/ 囚人 (85回)-(2007/04/20(Fri) 23:44:53)
> 仕様はおっしゃる通りです。
> \wや\Wが全角もマッチするということは、考えに入れていませんでした…。
> ただ、今回はパスワードに関する正規表現なので、パスワードを入力するTextBox
> そのものが半角しか受け付けていないので、大丈夫だと思います。
>

それは完全信頼してよいものでしょうか?
Javascript もそうですが、クライアント側の処理を完全信頼してはいけません。

引用返信 編集キー/
■3025 / inTopicNo.15)  Re[14]: パスワードの正規表現
□投稿者/ ASP.NET 初心者 (7回)-(2007/04/20(Fri) 23:58:38)
> それは完全信頼してよいものでしょうか?
> Javascript もそうですが、クライアント側の処理を完全信頼してはいけません。

逆に、パスワード入力のテキストボックス(●しか表示されない)で、全角文字を入れることって
可能なんでしょうか?その辺は半角しか入らないものと考えていましたが…

引用返信 編集キー/
■3026 / inTopicNo.16)  Re[15]: パスワードの正規表現
□投稿者/ 囚人 (86回)-(2007/04/21(Sat) 00:01:19)

> 逆に、パスワード入力のテキストボックス(●しか表示されない)で、全角文字を入れることって
> 可能なんでしょうか?その辺は半角しか入らないものと考えていましたが…

ブラウザはいろいろありますからね。余裕で可能です。
例えば他にも、MaxLength を設定しても、それ以上の桁数を入力する事も余裕です。
引用返信 編集キー/
■3027 / inTopicNo.17)  Re[16]: パスワードの正規表現
□投稿者/ ASP.NET 初心者 (8回)-(2007/04/21(Sat) 00:07:22)
> ブラウザはいろいろありますからね。余裕で可能です。

なるほど。IEのことしか考えてませんでしたね。
そこまで気が付きませんでした。
やはり、[a-zA-Z0-9]の方がいいですね。替えておきます。
引用返信 編集キー/
■3029 / inTopicNo.18)  Re[17]: パスワードの正規表現
□投稿者/ 囚人 (87回)-(2007/04/21(Sat) 00:16:16)
誤解しないでいただきたいのですが、\w が必ずしも全角を受け付けるという意味ではありません。正規表現の処理系によって変わってしまうという意味です。
なので、正規表現を扱うときは対象の処理系(今回は .NET Framework)が正規表現どう扱うかを知っていなければなりません。
クライアントスクリプトでも正規表現検証を行うならば、同じ正規表現でも .NET Framework と Javascript ではマッチする文字が違う場合があるので注意が必要です。
引用返信 編集キー/
■3035 / inTopicNo.19)  Re[18]: パスワードの正規表現
□投稿者/ aoa (21回)-(2007/04/21(Sat) 10:34:50)
こんにちは。
これではどうでしょうか?

^(?=[^a-zA-Z0-9]*[a-zA-Z0-9])(?=[a-zA-Z0-9]*[^a-zA-Z0-9])\S{7}")

引用返信 編集キー/
■3036 / inTopicNo.20)  Re[19]: パスワードの正規表現
 
□投稿者/ aoa (22回)-(2007/04/21(Sat) 10:39:20)
最後に$を入れ忘れました。
^(?=[^a-zA-Z0-9]*[a-zA-Z0-9])(?=[a-zA-Z0-9]*[^a-zA-Z0-9])\S{7}$

引用返信 編集キー/

次の20件>
トピック内ページ移動 / << 0 | 1 >>

管理者用

- Child Tree -