我有一个MVVM应用程序,用户注册一个人。要注册一个人,用户必须在提供的三个文本框中提供至少2个有效的电话号码。
“有效”电话号码至少包含10个号码。
我已经实现了IDataErrorInfo,并且我的文本框在绑定属性发生更改时进行验证。
我的问题涉及如何实际验证内容?
这构成了有效的输入:
Textbox 1 : 0123456789
Textbox 2 : 0123456789
Textbox 3 : {null}
原样
Textbox 1 : 0123456789
Textbox 2 : 0123456789
Textbox 3 : 0123456789
然而,这些无效:
Textbox 1 : 0123456789
Textbox 2 : 012345678
Textbox 3 : {null}
和
Textbox 1 : 0123456789
Textbox 2 : {null}
Textbox 3 : {null}
因此,这实际上更多的是编码问题,而不是验证问题。
我到目前为止:
private string ValidateTelephoneNumbers()
{
var hasNumber1 = BoundProperty1 != string.Empty;
var hasNumber2 = BoundProperty2 != string.Empty;
var hasNumber3 = BoundProperty3 != string.Empty;
if (hasNumber1 && (hasNumber2 || hasNumber3) || (hasNumber2 && hasNumber3))
{
return null;
}
else
{
return "Specify at least 2 valid telephone numbers."
}
}
涵盖了要求的“指定至少两个”部分...但是有更优雅的方法来检查每个提供的数字的长度,而不是检查每个数字吗?
答案 0 :(得分:1)
我会这样做:
private string ValidateTelephoneNumbers()
{
int number = 0;
int validNumbers = 0;
if (int.TryParse(BoundProperty1, out number) && number > 999999999)
validNumbers++;
if (int.TryParse(BoundProperty2, out number) && number > 999999999)
validNumbers++;
if (int.TryParse(BoundProperty3, out number) && number > 999999999)
validNumbers++;
if (validNumbers > 1)
{
return null;
}
else
{
return "Specify at least 2 valid telephone numbers.";
}
}