2016-06-10 8 views
0

Ich erstellte eine Tabelle Feld, und zusätzlich habe ich meine benutzerdefinierte EDT mit dem Namen: MyEDT (zum Beispiel) erstellt.Wie überprüft man die EDT-Jahreslänge?

MyEDT ist INTEGER Typ, und ich habe das System-Standard EDT YearBase erweitert. Also, wenn ich die Buchstaben (wie "abecjskjfh") einfügen, bekomme ich einen Fehler.

Aber ich brauche eine Regel, ich möchte nur Wert mit 4 Zahlenzeichen einfügen, ich will nur Werte aussehen: 2000, 2006, 1982 etc ....

Ich kann dies durch Code überprüfen/steuern, in Methoden validateWrite oder validateField I insered diesen Code:

switch (p1) 
{ 
case fieldNum(MyTable, MyField) : 
      if (strLen((strFmt("%1",this.MyField))) != 4) 
      throw error ("Inser only value AAAA"); 
      break; 
} 

Aber es ist möglich, oder existieren creato oder axtends das Jahr EDT mit nur 4 Nummer Char Länge? Oder gibt es eine andere Möglichkeit, die Länge des Feldwerts zu überprüfen?

Vielen Dank,

viel Spaß!

Antwort

3

Wenn Sie einen Ganzzahl-EDT verwenden möchten, gibt es keine Möglichkeit, den Bereich der zulässigen Zahlen zu beschränken, mit Ausnahme der AllowNegative-Eigenschaft. Also müssen Sie die Validierung in Code wie in Ihrer Frage durchführen. Aber ich würde vorschlagen, Ihre Validierungslogik zu ändern, um einen Zahlenbereich zu validieren, anstatt die Zahl auf eine Zeichenkette zu übertragen und dann die Anzahl der Zeichen zu validieren. Auf diese Weise können auch sicher machen könnte, dass die Nutzer nicht ein Jahr wie 0000.

if (this.MyField< 1900 || this.MyField > 9999) 
{ 
    throw error("Please enter a year between 1900 and 9999"); 
} 

Eine andere Möglichkeit geben könnte ein Datum EDT zu verwenden, in denen Sie die DateYear, DateMonth und DateDay Eigenschaften so eingestellt, dass nur das Jahr angezeigt wird. Dies würde auch bei der Dateneingabe helfen (z. B. 2 wird durch 2002 ersetzt) ​​und gibt Ihnen einen schönen Fehlerdialog, wenn der Benutzer zum Beispiel "abc" eingibt.

Screenshot of example using date EDT that only shows the year

+0

Sehr gut funktionieren, Lösung gut thansk @ FH-Inway, nutzen zu können! – ulisses

1

Sie können mit X ++ match Funktion.

match('<:d:d:d:d>','2004') würde alle 4-stellige Zeichenfolge (0000-9999) übereinstimmen.

match('<[12]:d:d:d>','2004') würde String 1000-2999 übereinstimmen.

Alternative Art und Weise ist System.Text.RegularExpressions.Regex.IsMatch('1234', '^\d{4}$')

+0

Danke @Matej, gute Infos! – ulisses