982

I want to use JavaScript (can be with jQuery) to do some client-side validation to check whether a string matches the regex:

^([a-z0-9]{5,})$

Ideally it would be an expression that returned true or false.

I'm a JavaScript newbie, does match() do what I need? It seems to check whether part of a string matches a regex, not the whole thing.

Karol Selak
  • 3,659
  • 4
  • 28
  • 60
Richard
  • 29,061
  • 28
  • 104
  • 145

13 Answers13

1544

Use regex.test() if all you want is a boolean result:

console.log(/^([a-z0-9]{5,})$/.test('abc1')); // false

console.log(/^([a-z0-9]{5,})$/.test('abc12')); // true

console.log(/^([a-z0-9]{5,})$/.test('abc123')); // true

...and you could remove the () from your regexp since you've no need for a capture.

Code Maniac
  • 35,187
  • 4
  • 31
  • 54
user113716
  • 310,407
  • 61
  • 442
  • 435
226

Use test() method :

var term = "sample1";
var re = new RegExp("^([a-z0-9]{5,})$");
if (re.test(term)) {
    console.log("Valid");
} else {
    console.log("Invalid");
}
KeaganFouche
  • 469
  • 5
  • 8
Abhijeet Kasurde
  • 3,570
  • 1
  • 23
  • 32
126

You can use match() as well:

if (str.match(/^([a-z0-9]{5,})$/)) {
    alert("match!");
}

But test() seems to be faster as you can read here.

Important difference between match() and test():

match() works only with strings, but test() works also with integers.

12345.match(/^([a-z0-9]{5,})$/); // ERROR
/^([a-z0-9]{5,})$/.test(12345);  // true
/^([a-z0-9]{5,})$/.test(null);   // false

// Better watch out for undefined values
/^([a-z0-9]{5,})$/.test(undefined); // true
pmrotule
  • 7,915
  • 3
  • 43
  • 54
  • 3
    The reason it works with a number is because the number is coerced into a string, because it's given as a parameter when it's expecting a string. I wouldn't rely on this behavior. It depends on your environment's implementation of test(). (match fails because numbers don't have a `match` member). I'd reccomend explicitly converting your number to a string if you want to use it with a regex (`String(123)` for example). – Bronzdragon Jan 20 '19 at 14:47
  • The match can be used here, but if you look at performance, `test` performs 30% better when we just want to validate a string to match the regex and not extract substrings from it. – Akansh Feb 26 '19 at 06:19
  • @pmrotule Yeah, but it should be mentioned before match description. – Akansh Feb 26 '19 at 10:54
  • The most significant difference between test and match (and matchAll) is that match does things like to return a list of all matching sub-strings, while test only checks if there are any. Check the regex methods in https://javascript.info/regexp-methods – Juan Lanus Jan 13 '20 at 20:49
61

Use /youregexp/.test(yourString) if you only want to know whether your string matches the regexp.

J0e3gan
  • 8,570
  • 9
  • 52
  • 78
user278064
  • 9,778
  • 1
  • 32
  • 46
17

let str = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';
let regexp = /[a-d]/gi;
console.log(str.match(regexp));
dota2pro
  • 6,421
  • 7
  • 34
  • 68
Mike
  • 390
  • 3
  • 12
16

Here's an example that looks for certain HTML tags so it's clear that /someregex/.test() returns a boolean:

if(/(span|h[0-6]|li|a)/i.test("h3")) alert('true');

Remember to indicate ^ for beginning of the string and $ for the end, if you want to test the exact match of entire string.

Example:

/[a-z]+/.test('aaa111'); // true
/^[a-z]+$/.test('aaa111'); // false
Kostanos
  • 8,552
  • 4
  • 46
  • 62
user2449231
  • 464
  • 5
  • 6
9

const regExpStr = "^([a-z0-9]{5,})$"
const result = new RegExp(regExpStr, 'g').test("Your string") // here I have used 'g' which means global search
console.log(result) // true if it matched, false if it doesn't
Penny Liu
  • 11,885
  • 5
  • 66
  • 81
Geetanshu Gulati
  • 560
  • 7
  • 12
5

try

 /^[a-z\d]{5,}$/.test(str)

console.log( /^[a-z\d]{5,}$/.test("abc123") );

console.log( /^[a-z\d]{5,}$/.test("ab12") );
Kamil Kiełczewski
  • 71,169
  • 26
  • 324
  • 295
5

I would recommend using the execute method which returns null if no match exists otherwise it returns a helpful object.

let case1 = /^([a-z0-9]{5,})$/.exec("abc1");
console.log(case1); //null

let case2 = /^([a-z0-9]{5,})$/.exec("pass3434");
console.log(case2); // ['pass3434', 'pass3434', index:0, input:'pass3434', groups: undefined]
Juan Navarrete
  • 451
  • 4
  • 7
5

You can try this, it works for me.

 <input type="text"  onchange="CheckValidAmount(this.value)" name="amount" required>

 <script type="text/javascript">
    function CheckValidAmount(amount) {          
       var a = /^(?:\d{1,3}(?:,\d{3})*|\d+)(?:\.\d+)?$/;
       if(amount.match(a)){
           alert("matches");
       }else{
        alert("does not match"); 
       }
    }
</script>
Tongi
  • 79
  • 1
  • 1
3

please try this flower:

/^[a-z0-9\_\.\-]{2,20}\@[a-z0-9\_\-]{2,20}\.[a-z]{2,9}$/.test('abc@abc.abc');

true

Jaber Alshami
  • 176
  • 1
  • 12
0

If you don't want ^ and $ around the regex (I had such a usecase) you can do something like

let reg = /[a-zA-Z0-9]+/g
let txt = "hello"
let matches = reg.exec(txt)[0] == txt
console.log(`It ${matches ? "does" : "doesn't"} match`)
Madhusoodan P
  • 641
  • 8
  • 16
0

Update/Add

If the query string does not present in the URL then the below solution will work to add the param in the URL, if it already exists then it will update.

function updateUrlParameter(url, param, value) {
  var regex = new RegExp("(?<=[?|&])(" + param + "=)[^&]+", "i");
  if (regex.test(url)) {
    return url.replace(regex, param + "=" + value);
  } else {
    if (window.location.search) {
      return `${url}&${param}=${value}`;
    }else{
      return `${url}?${param}=${value}`;
    }
  }
}

Sufiyan Ansari
  • 1,534
  • 17
  • 22