2016-06-10 57 views
0

我創建了一個表的字段,除此之外,我創建了自定義EDT,名爲:MyEDT(例如)。如何查看美國東部時間長度?

MyEDTINTEGER類型和我已經擴展了系統標準EDT YearBase。 所以,如果我插入字母字符(看起來像「abecjskjfh」),我得到一個錯誤。

但我需要一個規則,我只想插入值爲4的數字字符,我只想要值看起來像:2000年,2006年,1982年等...。

我可以檢查/通過代碼控制這一點,方法validateWritevalidateField我insered驗證碼:

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

但是,這是可能的,或者存在creato或axtends的YEAR EDT只有4數字字符長度?或者,還有另一種方法來檢查字段值的長度嗎?

謝謝大家,

享受!

回答

3

如果您想使用整數EDT,我認爲沒有辦法限制允許的數字的範圍,除了AllowNegative屬性。所以你必須像你的問題一樣在代碼中進行驗證。但我會建議更改驗證邏輯來​​驗證數字範圍,而不是將數字轉換爲字符串,然後驗證字符數。這種方式,您也可以確保用戶無法進入一年像0000

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

另一種可能是你設置DateYearDateMonthDateDay特性,使得僅在今年顯示使用日期EDT。這也有助於輸入數據(例如,2被替換爲2002),並且如果用戶輸入例如「abc」,則會給你一個很好的錯誤對話框。

​​

+0

非常thansk @ FH-Inway,做工精良,很好的解決方案! – ulisses

1

您可以使用X ++ match功能。

match('<:d:d:d:d>','2004')會匹配所有4位數的字符串(0000-9999)。

match('<[12]:d:d:d>','2004')會匹配字符串1000-2999。

另一種方法是使用System.Text.RegularExpressions.Regex.IsMatch('1234', '^\d{4}$')

+0

感謝@Matej,很好的信息! – ulisses

相關問題