delphi 密码特殊字符验证

qzwqbdag  于 2023-10-18  发布在  其他
关注(0)|答案(2)|浏览(139)

我希望我的代码检查编辑框中写入的内容是否包含特殊字符。它正在这样做,但如果在Array中找到特殊字符,它会逐个检查每个字符。如果第一个字母/字符不是特殊字符,它将显示一条消息(“密码必须...”),并继续检查其他字母是否是特殊字符,直到它到达编辑框中所写内容的结尾,即使它可能在第三个字符中找到特殊字符。

for Number := 1 to Length(s) do
begin
  if Position(s[Number],Array) > 0 then
  begin
    ShowMessage('Success');
  end
  else
  begin
    ShowMessage('Password must contain at least one special character');
  end;   
end;
ct3nt3jp

ct3nt3jp1#

如果发现“特殊字符”,则需要停止循环。你可以使用Break来实现。您还需要记住是否找到了这样的字符,然后在循环结束后对结果进行操作。
尝试更像这样的东西。

var
  hasSpecialChar: Boolean;
...
hasSpecialChar := False;
for Number := 1 to Length(s) do
begin
  if Position(s[Number],Array) > 0 then
  begin
    hasSpecialChar := True;
    Break;
  end;
end;
if hasSpecialChar then
  ShowMessage('Success') 
else
  ShowMessage('Password must contain at least one special character');
bxjv4tth

bxjv4tth2#

我建议你使用正则表达式,这将使你的生活更容易,这个例子应该做的伎俩,它返回一个字符串与所有使用的字符,而不是字母或数字

procedure TForm1.Button2Click(Sender: TObject);
    var
    Regex: TPerlRegEx;
    sApp: string;
    begin

      regex:= TPerlRegEX.Create;

      try

        Regex.RegEx := '[^a-zA-Z0-9]';// match every character that isn't in a --> z A --> Z 0 --9

        Regex.State := [preNotEmpty];
        regex.Options := [preNoAutoCapture];

        Regex.Subject := edit1.Text;

        sapp := '';

        if Regex.Match then
        begin

          repeat

            sapp := sapp + regex.MatchedText;

          until not Regex.MatchAgain;

        end;

      finally
        Regex.Free;
      end;

      ShowMessage(sapp);

    end;

我已经使用了 Delphi 11和System.RegularExpressionsCore,但诀窍是由这个正则表达式[^a-zA-Z0-9],那么你可以使用你喜欢的库来尝试它!

相关问题