我创建了一个表 Field ,除此之外,我创建了自定义EDT,名为: MyEDT (例如)。
MyEDT 是 INTEGER 类型,我扩展了系统标准EDT YearBase 。 所以,如果我插入字母字符(看起来像" abecjskjfh")我会收到错误。
但是我需要有一个规则,我想只插入4号字符的值,我只想要值看起来像:2000,2006,1982等......
我可以通过代码检查/控制它,在方法 validateWrite 或 validateField 中,我对此代码进行了编码:
switch (p1)
{
case fieldNum(MyTable, MyField) :
if (strLen( (strFmt("%1",this.MyField)) ) != 4)
throw error ("Inser only value AAAA");
break;
}
但是,只有4个字符长度可以创建或者使用YEAR EDT吗?或者,还有另一种方法可以检查字段值的长度吗?
全心全意,
享受!
答案 0 :(得分:3)
如果你想使用整数EDT,我认为除了overflow-x:auto;
属性之外,没有办法限制允许数字的范围。所以你必须像你的问题一样在代码中进行验证。但我建议更改验证逻辑以验证数字范围,而不是将数字转换为字符串,然后验证字符数。这样,您还可以确保用户无法输入像0000这样的年份。
AllowNegative
另一种可能是使用日期EDT设置if (this.MyField< 1900 || this.MyField > 9999)
{
throw error("Please enter a year between 1900 and 9999");
}
,DateYear
和DateMonth
属性,以便只显示年份。这也有助于数据输入(例如2被2002替换)并且如果用户输入例如“abc”,则会给出一个很好的错误对话框。
答案 1 :(得分: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}$')