Javascript 有没有更简单的方法使多个输入等于一个?
好的,现在我正在写一个脚本,你必须把事情发生的频率和我用“每月”来表示每月一次的脚本放在这里。 但很明显,人们可能不只是“每月”一次 所以我写这封信是为了以防万一他们写别的东西Javascript 有没有更简单的方法使多个输入等于一个?,javascript,Javascript,好的,现在我正在写一个脚本,你必须把事情发生的频率和我用“每月”来表示每月一次的脚本放在这里。 但很明显,人们可能不只是“每月”一次 所以我写这封信是为了以防万一他们写别的东西 if (RepeatDay === "once a month" || RepeatDay === "Once a Month" || RepeatDay === "every month" || RepeatDay === "month" || RepeatDay === "Month" || RepeatDay ==
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"
}
问题是,我有很多这样的输入类型,我想知道是否有更简单的方法来实现它。您可以使用
if(RepeatDay.toLowerCase().indexof('month')>-1){
var RepeatDay = "Monthly";
}
但正如评论中所建议的,在这种情况下,最好给用户提供下拉列表,而不是文本输入。您可以创建一个数组
var arr=["once a month","Once a Month","every month","month" ,"Month","monthly","Once A Month"]
if(arr.indexOf(RepeatDay)!==-1){
RepeatDay='monthly';
}
注意:不适用于IE正如已经指出的,我强烈建议用户从您控制的一组选项中进行选择 但是,如果您真的想对照这样的列表进行检查,您有几个选项(所有选项都很可能与
toLowerCase
相结合,以减少需要测试的内容的数量):
switch
语句,它还可以让您轻松映射其他值,如“weekly”等:
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;
// ...
}
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是随机次数) 每月 xm 每月x x倍 x M 每隔10天 曾经 每个月的第一天 只在六月 等等
你不想要一个包含数千个案例的数组,显然你无法验证单词month或单词m是否存在(再次参见示例)。你让他们自由进入这个时期?正如j0评论的那样,为什么不给他们一个下拉菜单呢。强制他们使用下拉菜单。。。否则,您将处理无限的用户输入可能性。如果他们不使用单词month,只使用“M”或者如果他们输入了另一个奇怪的值呢?因为我也希望他们能够输入天数,如果我使用1-31的下拉菜单,那么底部的单词Monthly可能看起来有点奇怪。不要重新发明轮子:输入时间段是一种常见的操作,没有人接受自由形式的输入。你的反对是基于一个关于如何做的过于简单的想法;查看计算机(或智能手机)中的约会功能,了解一些想法。if中的var将被代码破坏。一定要删除它。哈哈,这么复杂?看:)@nicael,对于许多不需要的值,它将返回true,因为它只需搜索子序列“month”@Anonymous就可以工作。代码太简单了,为什么需要测试它?这实际上是我在寻找的。我不知道为什么,但我没有想到一个数组。谢谢:DBoby,这可以工作。但扩展性还不够。看看我的答案,它解释了为什么
“一个月四次”
@MatthewMcveigh,如果你看到OP想要捕捉这样的字符串。问题中提到的那些人并不是他想抓住的唯一的人。他提到,但显然,人们可能不只是“每月”才对。我写这封信是为了以防万一。理想情况下,正如评论中所建议的,在这种情况下,固定值输入(如下拉列表)更可取。
RepeatDay = repeatOptions[RepeatDay.toLowerCase()];
if (!RepeatDay) {
// Invalid option specified
}