はじめまして。よろしくお願いします。
現在、Delphi7Proで会員制のWebアプリを作成中です。
ユーザーIDとパスワードでユーザー認証を行います。
【質問内容】
ユーザー認証後に、各会員がパスワードの変更が出来るようにしたいと思います。そこで、変更用に入力されたパスワード文字列に使用不可の文字が含まれているかどうかを判定するにはどうすればよいのでしょうか?
パスワードの入力条件は下記の通りです。
※使用可能文字列(半角)
abcdefghijklmnopqrstuvwxyz
ABCDEFGHIJKLMNOPQRSTUVWXYZ
0123456789 !#$%^&*+-.|
※使用不可能文字列(半角)
( ) < > @ , ; : nbsp;" / [ ] ? = { } SP(スペース) TAB(タブ)
および全ての全角文字
よろしくお願いします。
馬鹿正直にコーディングすると
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 になる
使用可能文字列の中の「!」は半角ですよね?
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;
改良の余地あるヵも…
遅い上に、あらためて見ると意味不明なことしてる部分が多い
ごめんなさい
jok様、んぽ様
回答ありがとうございました。
んぽ様の回答ではエラーが出ちゃったので、jok様の回答を採用させていただきました。
私にとっては、『Delphiで、こういう使いかたがあるのか・・・』と目からウロコ状態でした。
ありがとうございました。
解決済みですが
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;
while・(i>Length(s))or・b・do
ではなく
while・(i>Length(s))and・b・do
でした
すみません、蛇足ですが、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;
ツイート | ![]() |