ユーザからの入力を収集する際に、IPアドレスであるかどうかを確認するにはどうすればよいですか?Inno Setupスクリプト内での基本的なIP検証
2
A
答えて
5
IPアドレス(実際にはIPv4を意味します)は実際には整数ですが、普通は.
で区切られた4つの数字として書かれています。これらの数字のそれぞれは、整数のバイト値を表します。したがって、それぞれの数字は0〜255(incl)の数字でなければなりません。
function CheckIP(Input: String): Cardinal;
var
IP: Cardinal;
i : Integer;
Part: Integer;
PartValue: Cardinal;
PartValid: Boolean;
begin
Part := 3;
PartValue := 0;
PartValid := False;
IP := 0;
{ When a '.' is encountered, the previous part is processed. Force processing }
{ the last part by adding a '.' to the input. }
Input := Input + '.';
for i := 1 to Length(Input) do
begin
{ Check next character }
if Input[i] = '.' then
begin
if PartValue <= 255 then
begin
if PartValid then
begin
{ A valid part is encountered. Put it in the result. }
IP := IP or (PartValue shl (Part * 8));
{ Stop processing if this is the last '.' we put in ourselves. }
if i = Length(Input) then
Break;
{ Else reset the temporary values. }
PartValid := False;
PartValue := 0;
Dec(Part);
end
else
RaiseException('Empty part');
end
else
RaiseException('Part not within 0..255');
end
else if ((Input[i] >= '0') and (Input[i] <= '9')) then
begin
{ A digit is found. Add it to the current part. }
PartValue := PartValue * 10 + Cardinal((Ord(Input[i]) - Ord('0')));
PartValid := True;
end
else
begin
{ Any other character raises an exception }
RaiseException('Invalid character');
end;
{ If part < 0, we processed too many dots. }
if Part < 0 then
RaiseException('Too many dots');
end;
{ Check if we found enough parts. }
if Part > 0 then
RaiseException('Address most consist of 4 numbers');
{ If Part is not valid after the loop, the input ended in a dot. }
if not PartValid then
RaiseException('IP cannot end in a dot');
{ Return the calculated IP address as a cardinal. }
Result := IP;
end;
2
私は、コードを修正し、今ではあなたはInno Setupのでそれを使用することができます。
//Validate an IPv4 address
function ValidateIP(
Input: String
): Boolean;
var
InputTemp : String;
IP: Cardinal;
i : Integer;
Part: Integer;
PartValue: Cardinal;
PartValid: Boolean;
begin
InputTemp := Input;
Result := True;
Part := 3;
PartValue := 0;
PartValid := False;
IP := 0;
// When a '.' is encountered, the previous part is processed. Force processing
// the last part by adding a '.' to the input.
Input := Input + '.';
for i := 1 to Length(Input) do
begin
// Check next character
if Input[i] = '.' then
begin
if PartValue <= 255 then
begin
if PartValid then
begin
// A valid part is encountered. Put it in the result.
IP := IP or (PartValue shl (Part * 8));
// Stop processing if this is the last '.' we put in ourselves.
if i = Length(Input) then
Break;
// Else reset the temporary values.
PartValid := False;
PartValue := 0;
Dec(Part);
end
else
Result := False;
end
else
Result := False;
end
else if ((((Ord(Input[i]) - Ord('0'))) >= 0) and ((Ord(Input[i]) - Ord('0')) <= 9)) then
begin
// A digit is found. Add it to the current part.
PartValue := PartValue * 10 + Cardinal((Ord(Input[i]) - Ord('0')));
PartValid := True;
end
else
begin
// Any other character
Result := False;
end;
// If part < 0, we processed too many dots.
if Part < 0 then
Result := False;
end;
// Check if we found enough parts.
if Part > 0 then
Result := False;
// If Part is not valid after the loop, the input ended in a dot.
if not PartValid then
Result := False;
end;
関連する問題
- 1. 検索Inno Setupの
- 2. 基本的なJavaScriptの検証
- 3. Grails remoteFieldクライアントの基本的な検証
- 4. Vibe.d基本的なフォーム検証
- 5. Inno Setup Javaバージョンを検出
- 6. C#WinFormsアプリケーション用のInno Setupスクリプトのヘルプ
- 7. Inno Setupでのカスタムディスクスパン
- 8. jQueryの基本的なフォームであれば検証や
- 9. iPhoneでの基本的なHTTP認証
- 10. Inno Setupの:
- 11. inno setupのレジストリ
- 12. Inno Setupのツール(WindowsのOS)ではInno Setupの
- 13. イオンで基本的な検証を行う
- 14. Jquery基本フォームの検証
- 15. 基本的なJavaScriptのループ/検証の質問
- 16. jQueryの検証プラグイン - エラーの配置 - 基本的なブートストラップ・グリッド
- 17. 非常に基本的なangle2フォームが検証されない
- 18. PHPスクリプトの基本的な保護
- 19. ターミナルプロンプトの基本的なbashスクリプト
- 20. Inno Setup [ファイル]セクション
- 21. Inno setup postinstallチェックボックス
- 22. Inno Setup:カスタムクラス
- 23. Inno Setup for .msi
- 24. Inno setup quotes problem
- 25. Inno Setup/SUPPRESSMSGBOXESカスタマイズ
- 26. Inno Setup - UrlCreateFromPath
- 27. Inno Setup - [code]
- 28. Inno Setup RegAsm.exeエラー
- 29. Xamarinの基本的なフォームベースの認証
- 30. Inno SetupのMySQLクエリ
私はそれを承知しています。私はそれをどのように行うことができますか、パスカルで質問しています。 –
私はこのInnoセットアップスクリプトを知らないので、Delphiで関数を書いて、Delphi固有の関数を残そうとしました。関数は入力文字列をチェックし、IPアドレスを基数として返します。エラーが見つかった場合、この関数は例外をスローします。この結果を使用して、IPが特定の範囲内にあるかどうかをさらに確認できます。このスクリプトが例外をサポートしていない場合は、関数をTrueまたはFalseに戻し、* out *パラメータでIPを返すような別の解決策を見つける必要があります。 – GolezTrol
Delphiの場合、このコードは非常に複雑になり、非効率的になります(例えば、charでcharをループする必要はありません)。 – TLama