Как разрешить только цифры, точки и сигналы? - PullRequest
0 голосов
/ 09 июня 2018

У меня есть этот класс для принудительного ввода только цифр символов

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 голосов
/ 09 июня 2018

Вы можете использовать метод 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
)

Вы можете найти примеры того, как его использовать здесь .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...