パスワードの入力チェック方法

解決


@っしー  2004-03-31 01:39:57  No: 8076

はじめまして。よろしくお願いします。

現在、Delphi7Proで会員制のWebアプリを作成中です。
ユーザーIDとパスワードでユーザー認証を行います。

【質問内容】
ユーザー認証後に、各会員がパスワードの変更が出来るようにしたいと思います。そこで、変更用に入力されたパスワード文字列に使用不可の文字が含まれているかどうかを判定するにはどうすればよいのでしょうか?

パスワードの入力条件は下記の通りです。

  ※使用可能文字列(半角)
  abcdefghijklmnopqrstuvwxyz
  ABCDEFGHIJKLMNOPQRSTUVWXYZ
  0123456789 !#$%^&*+-.|

  ※使用不可能文字列(半角)
  ( ) < > @ , ; : nbsp;" / [ ] ? = { } SP(スペース) TAB(タブ) 
  および全ての全角文字

よろしくお願いします。


jok  2004-03-31 01:57:39  No: 8077

馬鹿正直にコーディングすると

function IsRightPassword(const Password:string):Boolean;
var
  i:integer;
begin
  result := false;
  for i := 1 to Length(Password) do
    if not (Password[i] in ['a'..'z','A'..'Z','0'..'9','!','#','$','%','^',
                            '&','*','+','-','.','|']) then exit;
  result := true;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  if IsRightPassword(Edit1.Text) then
    Label1.Caption := 'true'
  else
    Label1.Caption := 'false';
end;

2バイト文字はリーディングバイトで必ず引っかかるので false になる


んぽ  2004-03-31 01:59:24  No: 8078

使用可能文字列の中の「!」は半角ですよね?

function IsGoodMojiretsu(const s: string):Boolean;
const
  OKMoji=['a'..'z']+['A'..'Z']+['0'..'9']+'!#$%^&*+-.|';
var
  i: Integer;
begin
  Result := True;
  for i:=1 to Length(s) do begin
    Result := s[i] in OKMoji;
    if not Result then exit;
  end;
end;

procedure TForm1.Button6Click(Sender: TObject);
begin
  if IsGoodMojiretsu(Memo2.Text) then
    ShowMessage('使用可能な文字列です')
  else ShowMessage('使用不可能な文字が含まれています。');
end;

改良の余地あるヵも…


んぽ  2004-03-31 02:10:01  No: 8079

遅い上に、あらためて見ると意味不明なことしてる部分が多い
ごめんなさい


@っしー  2004-03-31 02:27:00  No: 8080

jok様、んぽ様
回答ありがとうございました。

んぽ様の回答ではエラーが出ちゃったので、jok様の回答を採用させていただきました。

私にとっては、『Delphiで、こういう使いかたがあるのか・・・』と目からウロコ状態でした。

ありがとうございました。


るるとん@K  2004-03-31 05:07:57  No: 8081

解決済みですが
const
m=['a'..'z']+['A'..'Z']+['0'..'9']+'!#$%^&*+-.|';
var
i:Integer;
b:boolean;
s:string;
begin
i:=0;
b:=true;
s:=Edit1.Text//調べる文字列
while (i>Length(s))or b do
begin
b:=ansipo(s[i],m)>-1;
inc(i);
end;
if stop then ShowMessage('×');
if not stop then ShowMessage('◎');
end;


るるとん@K  2004-03-31 05:09:35  No: 8082

while・(i>Length(s))or・b・do
ではなく
while・(i>Length(s))and・b・do
でした


jok  2004-03-31 05:12:31  No: 8083

すみません、蛇足ですが、StrScan() を使ってもうすこし読みやすくしました。

function IsRightPassword(const Password:string):Boolean;
const
  str:string = 'abcdefghijklmnopqrstuvwxyz'+
               'ABCDEFGHIJKLMNOPQRSTUVWXYZ'+
               '0123456789!#$%^&*+-.|';
var
  i:integer;
begin
  result := false;
  for i := 1 to Length(Password) do
    if StrScan(PChar(str),Password[i]) = nil then exit;
  result := true;
end;


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加