簡體   English   中英

C#檢查字符串是否包含字符但允許與其他特定字符一起使用

[英]C# check if the string contains a character but allowed with other specific character

我的單位轉換器應用程序有問題。 我試圖阻止用戶使用數字以外的任何其他字符,但我需要允許他們使用“。” 我怎樣才能做到這一點?

我花了大約兩天的時間,沒有運氣。 請幫忙。 這是我的代碼。

 public string[] YardsToMeters(string yards)
        {
            if(yards == null || yards.Contains(" "))
            {
                string[] str = new string[1];
                str[0] = "Please enter some values";

                return str;

            }

在這里,我正在檢查允許的字符:

            else if((Regex.IsMatch(yards, @"^\d+$") == true) || (yards.Contains(".") && yards[0] != '.'
                 || (yards.Contains('\n')) && (Regex.IsMatch(yards, @"^\d+$") == true) && !yards.Contains(".")))
            {

                if (!yards.Contains('\n') && Regex.IsMatch(yards, @"^\d+$") == true)
                {
                    double d = double.Parse(yards, CultureInfo.InvariantCulture) * 0.9144f;

                    string[] array = new string[1];
                    array[0] = d.ToString();

                    return array;

                }

                else if(Regex.IsMatch(yards, @"^\d+$") == true || yards.Contains(".") && yards[0] != '.')
                {
                    double[] doubles = new double[yards.Split("\r\n").Count()];

                    for (int i = 0; i < yards.Split("\r\n").Count(); i++)
                    {
                        if (yards.Contains("."))
                        {
                            double value = Convert.ToDouble(yards.Split("\r\n")[i].Replace('.',','));
                            doubles[i] += value;

                            string.Format("{0}", value * 0.9144f);
                        }

                        else
                        {
                            double value = Convert.ToDouble(yards.Split("\r\n")[i]);
                            doubles[i] += value;

                            string.Format("{0}", value * 0.9144f);
                        }


                    }

                    string[] strings = new string[doubles.Length];

                    for (int i = 0; i < yards.Split('\n').Length; i++)
                    {
                        strings[i] = string.Format("{0}", doubles[i] * 0.9144f);
                    }

                    return strings;
                }
                else
                {
                    string[] str = new string[1];
                    str[0] = "Please use numbers only!";

                    return str;
                }

            }
            else
            {

                string[] str = new string[1];
                str[0] = "Please use numbers only! Enter is also not allowed";

                return str;

            }
        }

請幫我。

我認為您已經達到了無法實現目標的地步,並且不斷地修改和調整一個錯誤的解決方案,以嘗試解決所有失敗的情況

碼到米->碼數乘以0.9144f

public double YardsToMetres(double yards){ //not sure why you're using string everywhere
    return yards * 0.9144f;
}


public void YardsTextbox_TextChanged(object sender, EventArgs e){
    try{
        double y = double.Parse(_yardsTextbox.Text);
        MessageBox.Show("In metres:" + YardsToMetres(y));
    } catch(FormatException ex){
        MessageBox.Show("The value you entered (" + _yardsTextbox.Text + ") cannot be converted to a number. Enter a number");
    }
}

這是一個示例,對您的用戶界面一無所知。建議您將轉換代碼與其余代碼分開。 它應該帶一個數字並返回一個數字(不要僅僅因為輸入/輸出提供/要求而將所有字符串都設為字符串)。

您從用戶收集數據的輸入例程應將其輸入解析為准備好轉換器的數字。 如果解析失敗,請他們更正。 對此不要過於深入和有意義/復雜-嘗試解析它,如果失敗,則告訴用戶失敗-他們將找出他們做錯了什么。 您可以提供一些有限的幫助,例如,如果需要的話,一開始就修剪空白(實際上double.parse會忽略空白,因此這是不必要的),但我可能會停止刪除所有非數字等,因為您這樣做了用戶輸入的數據的操作,進行計算的結果,並且用戶不知道(除非您告訴他們)最終要進行計算的數據是什么。

如果他們寫0xFF80,並期望將其十六進制數(相當於65,408)轉換為mtres,則如果您剝離了xFF,然后對80進行計算,他們可能會感到驚訝

同樣,可以使雙重解析對不同的文化敏感。 有人將1,234.5寫為1.234,5。 如果您決定刪除逗號(因為它們是千位分隔符),那么如果某人使用逗號作為十進制分隔符,那么最終將破壞某人的十進制數字。 仔細考慮您想深入檢查並幫助用戶正確形成數字的深度; 您最好嘗試使用他們給您的東西,如果失敗了,告訴他們

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM