如何只允许数字、点和信号?



我让这个类只强制数字字符

public class BsnValidationTriggerAction : TriggerAction<Entry>
{
private string _prevValue = string.Empty;
protected override void Invoke(Entry entry)
{
int n;
var isNumeric = int.TryParse(entry.Text, out n);
if (!string.IsNullOrWhiteSpace(entry.Text) && (entry.Text.Length > 9 || !isNumeric))
{
entry.Text = _prevValue;
return;
}
_prevValue = entry.Text;
}
}

但现在我需要知道如何实现它以只允许数字、信号(- 确切地(和点......有人可以帮助我吗?

您可以使用decimal.TryParse方法。

var isDecimal = decimal.TryParse(entry.Text, out n);

此外,您不需要额外的检查

string.IsNullOrWhiteSpace(entry.Text)

如果entry.Text的值是这样的,上面的函数返回true,那么对于这样的值,decimal.TryParse会返回false。

话虽如此,您的类可以按如下方式重构:

public class BsnValidationTriggerAction : TriggerAction<Entry>
{
private string _prevValue = string.Empty;
protected override void Invoke(Entry entry)
{
decimal n;
var isDecimal = decimal.TryParse(entry.Text, out n);
_prevValue = isDecimal ? entry.Text : _prevValue; 
}
}

更新

TryParse方法的重载也将数字的样式和格式提供程序作为参数。

public static bool TryParse(
string s,
NumberStyles style,
IFormatProvider provider,
out decimal result
)

您可以在此处找到有关如何使用它的示例。

最新更新