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

时间:2018-06-09 05:16:53

标签: c# android xamarin xamarin.forms

我这个班级只强制数字字符

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;
    }
}

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

1 个答案:

答案 0 :(得分:4)

您可以使用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方法存在重载,它还将数字的styleformat provider作为参数。

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

您可以找到有关如何使用它的示例here