2010-12-14 78 views
0

我想验证某个公司是否已被选中。该companyList格式为:javascript正则表达式帮助

60261420(companyID列表)

我用

cID = $('#coName').val().split('::')[1]; 

只获取ID。

我打电话通过通过这个功能说60:

findCompany = function(value) { 
    var v = /^.+60,261,420$/.test(value); 
    alert(v); 
} 

当我通过完全相同的字符串,我得到错误的。任何帮助?

+0

什么是 “#companyList#” 在这里?换句话说,当你在页面上查看源代码时,那个正则表达式是什么样的? – Pointy 2010-12-14 16:37:48

+0

cfoutput标签是什么?你能看到你的浏览器中的JavaScript是什么,而不是源代码中。标签将被替换为某种东西。 – 2010-12-14 16:37:56

+0

@罗马里奥我猜这是一个ColdFusion的事情。 – Pointy 2010-12-14 16:38:51

回答

1

那么如果你的公司列表是数字ID这样的列表,你需要做所产生的正则表达式实际上是正确表达式—如果这甚至是你想要做到的方式。

另一个选择是只做一个数组,然后测试数组中的值。

作为一个正则表达式,不过,你可以做的是这样的:

var companyList = [<cfoutput> whatever </cfoutput>]; // get company ID list as an array of numbers 
var companyRegex = new RegExp("^(?:" + companyList.join('|') + ")$"); 

然后你就可以说:

function findCompany(id) { 
    if (companyRegex.test(id)) alert(id + " is already in the list!"); 
} 
+0

甜美! companyRegex.text(id)应该阅读companyRegex.test(id) – CFNinja 2010-12-14 17:10:35

+0

哦,是的权利 - 谢谢。 – Pointy 2010-12-14 17:11:11

+0

另外,请注意,只要您开始接触一大批公司,这会变得有点奇怪。它应该可以正常工作,但最多可以达到几百个。确保你用一大串ID来尝试它,以便你知道发生了什么! – Pointy 2010-12-14 17:12:43

0

为什么不把字符串拆分成一个数组,就像你为测试所做的一样,迭代列表并检查它是否在?

一个正则表达式就是球,头顶和较慢。很多。

总之,为您的具体问题:

你检查字符串"60"/^.+60,261,420$/

。+ 60显然不匹配,因为在60之前至少需要一个字符。逗号也会评估,并且不在您的字符串中。

我不太明白你的正则表达式来自哪里。

您是否正在寻找一个正则表达式来处理它们或者是一个硬编码的ID列表?

代码分裂,并检查ID数组:

findCompany = function(value) { 
    $('#coName').val().split('::').each(function(val){ 
    if(val == value) return true; 
    }); 
    return false; 
} 
+0

我正在寻找一个正则表达式。我试图创建一个,但它显然不正确。 ID来自查询,然后我转换为列表。我会试一试数组搜索 – CFNinja 2010-12-14 17:06:01

+0

'$'< - 是那个jQuery?在你的check-fn中:'$('#coName')。val()。split('::')。each(function(val){if(val == value)return true;});返回false;'。 – Kissaki 2010-12-14 17:08:06

+0

好的,它不是jQuery。它是什么库?它可能也有一些每个功能?如果不是,则必须使用JavaScripts(for coNameText)中的(var val)''。 – Kissaki 2010-12-14 17:13:41