Kung Fu Ninja
Kung Fu Ninja

Reputation: 3752

javascript regex help

i am trying to validate if a certain company was already picked for an application. the companyList format is:

60,261,420 ( a list of companyID)

I used

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

to get the id only.

I am calling this function by passing say 60:

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

when I pass the exact same string, i get false. any help?

Upvotes: 0

Views: 70

Answers (2)

Pointy
Pointy

Reputation: 413702

Well if your company list is a list of numeric IDs like that, you need to make the resulting regular expression actually be the correct expression — if that's even the way you want to do it.

Another option is to just make an array, and then test for the value being in the array.

As a regex, though, what you could do is this:

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

Then you can say:

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

Upvotes: 1

Kissaki
Kissaki

Reputation: 9217

Why not split the string into an array, like you did for your testing, iterate over the list and check if it's in?

A regexp just for that is balls, overhead and slower. A lot.

Anyway, for your specific question:

You’re checking the string "60" for /^.+60,261,420$/.

.+60 will obviously not match because you require at least one character before the 60. The commas also evaluate and are not in your String.

I don’t quite get where your regexp comes from.

Were you looking for a regexp to OR them a hard-coded list of IDs?

Code for splitting it and checking the array of IDs:

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

Upvotes: 0

Related Questions