用delphi代码验证密码

时间:2017-08-26 11:37:08

标签: delphi passwords delphi-2007 validating

希望实现一个最终用户对话框,要求他们创建自己的密码。

长度必须为9个字符。 1个字符必须是大写,1必须是小写,1必须是数字,['0'..'9'],一个必须来自一组6个预定义的ascii字符,如此。 [, '#', '%', '和,' '!', '*', '@']。

完成此操作。和工作。但是,我想要做的是使用onchange事件提供可见验证,如果满足所有要求,则将编辑框的颜色更改为绿色,否则更改为RED。对9个字符长度进行调整很容易,但是要检查9个不同的字符,以确保至少有1个上部,1个下部,1个数字和1个预定义,这证明有点困难。有人可以帮忙吗?谢谢。

这是代码:

procedure TPasswordForm.edtPassword1Change(Sender: TObject);      
  begin
    if Length(edtPassword1.Text <> 9 then
       edtPassword1.Color := clRed
    else
       edtPassword1.Color := clLime;
  end;

2 个答案:

答案 0 :(得分:6)

对于修复字符集功能可能非常简单。请注意,它不接受非拉丁字符。

function IsPasswordCrazy(const s: AnsiString): Boolean;
const
  C_Upcase = 1;
  C_Locase = 2;
  C_Digit = 4;
  C_SpecSym = 8;
  C_All = C_Upcase or C_Locase or C_Digit or C_SpecSym;
var
  i, keys: integer;
begin

  if Length(s) <> 9 then begin
    Result := False;
    Exit;
  end;

  keys := 0;
  for i := 1 to Length(s) do
    case s[i] of
      'A'..'Z': keys := keys or C_Upcase;
      'a'..'z': keys := keys or C_Locase;
      '0'..'9': keys := keys or C_Digit;
      '!','#','%','&','*','@': keys := keys or C_SpecSym;
    end;

  Result := keys = C_All;
end;

答案 1 :(得分:3)

这可以使用正则表达式

来实现

以下是错误消息的示例。

uses
  System.RegularExpressions;


function ValidatePassword(aPassword: String; var ErrorMessage: String): Boolean;
begin
  Result := false;
  ErrorMessage := '';

  if Length(aPassword) <> 9 then
  begin
    ErrorMessage := 'Password must be exactly 9 characters long';
    exit;
  end;

  if not TRegEx.IsMatch(aPassword, '[a-z]') then
  begin
    ErrorMessage := 'At least 1 character in the password must be lowercase';
    exit;
  end;

  if not TRegEx.IsMatch(aPassword, '[A-Z]') then
  begin
    ErrorMessage := 'At least 1 character in the password must be uppercase';
    exit;
  end;

  if not TRegEx.IsMatch(aPassword, '\d') then
  begin
    ErrorMessage := 'At least 1 character in the password must be a digit';
    exit;
  end;

  if not TRegEx.IsMatch(aPassword, '[!,#,%,&,*,@]') then
  begin
    ErrorMessage := 'At least 1 character in the password must be one of the following letters: !,#,%,&,*,@';
    exit;
  end;

  Result := True;
end;