2016-04-29 7 views
4

Ich muss überprüfen, ob eine Zeichenfolge nur Zeichen aus Bereichen enthält: 'A'..'Z', 'a'..'z', '0'..'9', also schrieb ich diese Funktion:Delphi überprüfen, ob das Zeichen im Bereich 'A' ist .. 'Z' und '0' .. '9'

aber wenn zum Beispiel, aValue = 'Hello' die StrToInt Funktion erhebe mich eine Ausnahme.

+2

Warum nicht mit http://docwiki.embarcadero.com /Libraries/Seattle/en/System.Character.TCharHelper.IsLetterOrDigit – RBA

+0

Weil ich entweder Buchstaben und Zahlen habe –

+0

@ img.simone Buchstaben oder Zahlen: Das ist genau was die verknüpfte Funktion tut. – Roddy

Antwort

7

Ein einzigartiger Satz von Char kann für Ihren Zweck verwendet werden.

function GetValueTrat(const aValue: string): string; 
const 
    CHARS = ['0'..'9', 'a'..'z', 'A'..'Z']; 
var 
    i: Integer; 
begin 
    Result := aValue.Trim; 
    for i := 1 to Length(Result) do 
    begin 
    if not (Result[i] in CHARS) then 
     raise Exception.Create('Non valido'); 
    end; 
end; 

Beachten Sie, dass in Ihrer Funktion, wenn aValue enthält ein Leerzeichen - wie 'test value ' zum Beispiel - eine Ausnahme ausgelöst wird, um die Verwendung von Trim nach der if Anweisung nutzlos ist.


Ein regulärer Ausdruck wie ^[0-9a-zA-Z] kann Ihr Problem in einem eleganteren Weg meiner Meinung nach lösen.


EDIT
Nach dem @RBA's comment auf die Frage, System.Character.TCharHelper.IsLetterOrDigit kann für die obige Logik als Ersatz verwendet werden:

if not Result[i].IsLetterOrDigit then 
    raise Exception.Create('Non valido'); 
+1

1) es ist kein guter Code seit Delphi 2009 - Compiler würde hier eine Warnung geben: http://docwiki.embarcadero.com/Libraries/Seattle/en/System.SysUtils.CharInSet //// 2) Nein, RBA ist hier falsch: Die Funktion, auf die hingewiesen wird, ist anders als die, die der Starter gefragt hat. TS wollte nur lateinische Buchstaben und RBA markierte alle Buchstaben aller Alphabete –

+0

@ Arioch'The - Sie haben Recht. Ich habe diese Funktion darauf hingewiesen, dass das OP sich nicht für Unicode interessiert (basierend auf dem in der Frage vorhandenen Code). – RBA