如何从wpf文本框中的十进制数中删除无效条目

时间:2015-04-24 12:41:50

标签: c# wpf

在WPF中我想允许文本框只接受小数点后最多2位的小数点数。例如,330.33有效,333.333无效。文本框应限制所有其他特殊字符。我创建了两个函数,一个用于返回无效字符串,另一个用于将字符串与用户按下的字符进行比较,如果字符串包含无效字符,则删除该字符。我认为这种对字符串中的无效字符进行硬编码并将其与无效键击进行比较的方法是不正确的。有没有更好的方法呢?。

   private string GetInvalidstring()
   { 
        string invalidCharacterString = @" ! "" # $ % & ' ( ) * + , -  / : ; < = > ? @ A B C D \ | _ ~ ^";
        invalidCharacterString += @" E F G H I J K L M N O P Q R S T U V W X Y Z ";
        return invalidCharacterString;
   }



    private string CheckValidEntry(string input)
    {
        string invalidCharacters = GetInvalidstring();
        char[] tocheck = input.ToCharArray();
        string copy = input;
        foreach (char c in tocheck )
        {
            if (invalidCharacters.Contains(c))
            {
               // int i = input.IndexOf(c);
                copy = input.Replace(c, ' ');
            }

        }
        return new string(copy.ToList().Where(c => c != ' ' ).ToArray());         

    }

3 个答案:

答案 0 :(得分:2)

您可以使用此正则表达式仅允许十进制数字最多两位到十进制

^(\d+)?+([\.]{1})?+([\d]{1,2})?$

<强> REGEX DEMO

另请查看Restrict a textbox to allow decimal upto two places

答案 1 :(得分:2)

你可以这样做:

private bool IsValid(string input)
{
    decimal temp;
    return decimal.TryParse(input,out temp) && Math.Round(temp,2)==temp;
}

答案 2 :(得分:0)

使用Math.Round()函数:

Math.Round(value, 2);

如果value = 333.333333,则Math.Round(value,2)返回333.33