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.
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.
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");
}
RegExp
allows to inject variable values into the regex string.
new RegExp("^([a-z0-9]{5,})$")
in order to make it work
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
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).
test
performs 30% better when we just want to validate a string to match the regex and not extract substrings from it.
Use /youregexp/.test(yourString)
if you only want to know whether your string matches the regexp.
let str = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'; let regexp = /[a-d]/gi; console.log(str.match(regexp));
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
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
try
/^[a-z\d]{5,}$/.test(str)
console.log( /^[a-z\d]{5,}$/.test("abc123") ); console.log( /^[a-z\d]{5,}$/.test("ab12") );
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]
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>
please try this flower:
/^[a-z0-9\_\.\-]{2,20}\@[a-z0-9\_\-]{2,20}\.[a-z]{2,9}$/.test('abc@abc.abc');
true
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`)
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}`;
}
}
}
Success story sharing