有没有一种更简单的方法可以使许多输入相等?

问题描述:

好的,现在我正在编写一个脚本,你必须把事情发生的频率和我用“每月”表示的脚本每月表示一次。 但显然人们可能不会恰到好处的“每月”。有没有一种更简单的方法可以使许多输入相等?

所以我写了这个以防万一他们写别的东西。

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的下拉菜单,那么单词月底在底部它可能会看起来有点奇怪。 –

您可以创建一个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://*.com/a/30956960):) – nicael

+0

你测试你的代码? – Anonymous

+0

@nicael @nicael将返回许多不需要的值,因为这只是通过搜索子序列“月”来工作 – bugwheels94

可以使用

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

但正如意见建议,这将是更好的给用户下拉,而不是文字输入在这样的情况下

+3

''“一个月四次”' –

+1

@MthethewMcveigh如果你看到OP想要捕获这样的字符串。问题中提到的那些人不是他想要捕捉的唯一人物。他提到,**但显然人们可能不会正确的“每月”。 所以我写了这个以防万一他们写别的东西。理想情况下,如评论中所建议的那样,固定价值投入(如下拉菜单)在这种情况下更可取。 –

正如已经指出的那样,我强烈建议让用户从您控制的一组选项中进行选择。

如果你真的想核对那样的名单,但是,你有几种选择(所有最有可能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 
    } 
    

我建议您以不同的方式来收集用户输入数据。

带有选项的下拉菜单对您和用户来说都会更有用。

其他答案可以工作。但认为用户仍然需要输入一个他们需要添加某些单词的数字,以便输入按预期工作。您将以代码中的许多不必要的解释性消息或验证结束。

不知道你确切的建议,但一个下拉式选择间隔类型(每月,每周,每年,每日)和一个类型数字输入知道在这种类型的间隔期间发生的次数应该工作和会更直观。

对于mi这是您需要照顾的有效值。

(x是次的随机数)

XPER月

XM

X为月

x次

×M的

每10名

一旦米

的每个m

仅6月份

等等首先mmonday ...

你不想要的案件一千数组,显然你不能验证该单词月份或单词m存在(请再次参阅exaples)。