2013-04-30 69 views
1

我想根据搜索文本的开头将某个变量设置为某些值。检查文本是否以字符开头,后跟数字

我目前有:

var action; 

switch (searchText.substr(0, 3).toUpperCase()) { 

    case 'ABC': 
     action = 'foo'; 
    break; 

    case 'CDE': 
     action = 'bar'; 
    break; 

} 

这工作。但我想扩展它,以便不仅仅检查文本是否以ABC开头,而应该是ABC +至少两个数字,如ABC12。我将如何在我的开关盒内制作一个正则表达式来验证它?

回答

5

您可以嵌入在switch语句中的正则表达式会在情况下返回不null

switch(true) { 

    case /^ABC\d\d/g.test(searchText): 
     action = 'foo'; 
    break; 

    case /^XYZ$/.test(searchText): 
     action = 'bar'; 
    break; 
} 

虽然我个人更喜欢桌子驱动的方法:

function firstMatch(text, mapping) { 
    for(var i = 0; i < mapping.length; i++) 
     if(mapping[i][0].test(text)) 
      return mapping[i][1]; 
} 

actions = [ 
    [/^ABC\d\d/g, 'foo'], 
    [/^XYZ\d\d/g, 'bar'], 
] 


action = firstMatch(searchText, actions) 
+0

谢谢,但是这会被硬编码为两个数字,对吧? – Johan 2013-04-30 08:10:58

+0

@Johan:没有。 '/^ABC\d\d/.test(x)'对于“ABC”返回true,并且对至少两个数字(它只是忽略其余部分)返回true。 – georg 2013-04-30 08:12:22

+0

不需要'g'标志。 – MikeM 2013-04-30 08:12:42

2
searchText.toUpperCase().match(/^ABC\d{2,}$/) 

如果字符串通过结合使用switch(true)regex.testABC开始,并包含至少2位

+0

你也想'​​toUpperCase()'字符串来扫描或使用不区分大小写的标志来匹配OP的原始代码的行为。 – alex 2013-04-30 07:59:05

+0

'$'可能是不需要的,因为我们只查看文本的开头。 – MikeM 2013-04-30 08:11:00

+0

@MikeM:好吧,我们在这里不是为了解决别人的问题,而是给予提示 – zerkms 2013-04-30 08:13:29

相关问题