2015-06-20 93 views
3

好的,現在我正在編寫一個腳本,你必須把事情發生的頻率和我用「每月」表示的腳本每月表示一次。 但顯然人們可能不會恰到好處的「每月」。有沒有一種更簡單的方法可以使許多輸入相等?

所以我寫了這個以防萬一他們寫別的東西。

if (RepeatDay === "once a month" || RepeatDay === "Once a Month" || RepeatDay === "every month" || RepeatDay === "month" || RepeatDay === "Month" || RepeatDay === "monthly"|| RepeatDay === "Once A Month"){ 
    var RepeatDay = "Monthly" 
} 

事情是我有很多這些類型的輸入,我想知道是否有一個更簡單的方法來做到這一點。

+5

你給他們自由王朝進入期間?爲什麼不給他們一個下拉菜單的選擇? – j08691

+1

正如j0所評論的。強制他們使用下拉菜單...否則,您將處理無限的用戶輸入可能性。如果他們不使用單詞月,只是「M」或者他們提出了另一個奇怪的值? – ecarrizo

+0

因爲我也希望他們能夠輸入天數,如果我做了1 - 31的下拉菜單,那麼單詞月底在底部它可能會看起來有點奇怪。 –

回答

-2

您可以創建一個Array

var arr=["once a month","Once a Month","every month","month" ,"Month","monthly","Once A Month"] 

if(arr.indexOf(RepeatDay)!==-1){ 
    RepeatDay='monthly'; 
} 

注意indexOf在IE中不起作用< 9所以你需要以經典的方式做到這一點

for(var i=0;i<arr.length;i++){ 
    if(arr[i]===RepeatDay){ 
     RepeatDay="monthly"; 
     break; //no need to check for further after a match is found 
    } 
} 
+0

哈哈,這麼複雜嗎?看看[這個答案](http://stackoverflow.com/a/30956960):) – nicael

+0

你測試你的代碼? – Anonymous

+0

@nicael @nicael將返回許多不需要的值,因爲這只是通過搜索子序列「月」來工作 – bugwheels94

3

可以使用

if(RepeatDay.toLowerCase().indexof('month')>-1){ 
    var RepeatDay = "Monthly"; 
} 

但正如意見建議,這將是更好的給用戶下拉,而不是文字輸入在這樣的情況下

+3

''「一個月四次」' –

+1

@MthethewMcveigh如果你看到OP想要捕獲這樣的字符串。問題中提到的那些人不是他想要捕捉的唯一人物。他提到,**但顯然人們可能不會正確的「每月」。 所以我寫了這個以防萬一他們寫別的東西。理想情況下,如評論中所建議的那樣,固定價值投入(如下拉菜單)在這種情況下更可取。 –

1

正如已經指出的那樣,我強烈建議讓用戶從您控制的一組選項中進行選擇。

如果你真的想覈對那樣的名單,但是,你有幾種選擇(所有最有可能toLowerCase相結合,減少的東西,你一定要考數):

  1. 你可以使用數組as Ankit demonstrated

  2. 您可以使用switch語句,它也可以讓你輕鬆地映射其他值是「周」和這樣的:

    switch (RepeatDay.toLowerCase()) { 
        case "once a month"; 
        case "every month"; 
        case "month"; 
        case "monthly": 
         RepeatDay = "Monthly" 
         break; 
        case "weekly": 
        case "once a week": 
         RepeatDay = "Weekly"; 
         break; 
        // ... 
    } 
    
  3. 您可以使用一個對象作爲一個地圖,這又使得它容易地圖 「週刊」 以及諸如得好:

    var repeatOptions = { 
        "once a month": "Monthly", 
        "every month": "Monthly", 
        "month": "Monthly", 
        "monthly": "Monthly", 
        "weekly": "Weekly", 
        "once a week": "Weekly", 
        // ... 
    }; 
    

    ...然後:

    RepeatDay = repeatOptions[RepeatDay.toLowerCase()]; 
    if (!RepeatDay) { 
        // Invalid option specified 
    } 
    
1

我建議您以不同的方式來收集用戶輸入數據。

帶有選項的下拉菜單對您和用戶來說都會更有用。

其他答案可以工作。但認爲用戶仍然需要輸入一個他們需要添加某些單詞的數字,以便輸入按預期工作。您將以代碼中的許多不必要的解釋性消息或驗證結束。

不知道你確切的建議,但一個下拉式選擇間隔類型(每月,每週,每年,每日)和一個類型數字輸入知道在這種類型的間隔期間發生的次數應該工作和會更直觀。

對於mi這是您需要照顧的有效值。

(x是次的隨機數)

XPER月

XM

X爲月

x次

×M的

每10名

一旦米

的每個m

僅6月份

等等首先mmonday ...

你不想要的案件一千數組,顯然你不能驗證該單詞月份或單詞m存在(請再次參閱exaples)。

相關問題