admin管理员组文章数量:1125966
I want to use JavaScript (I can also use jQuery) to do check whether a string matches the regex ^([a-z0-9]{5,})$
, and get a true
or false
result.
match()
seems to check whether part of a string matches a regex, not the whole thing. Does it solve the problem? Can I adapt it to solve the problem? How?
I want to use JavaScript (I can also use jQuery) to do check whether a string matches the regex ^([a-z0-9]{5,})$
, and get a true
or false
result.
match()
seems to check whether part of a string matches a regex, not the whole thing. Does it solve the problem? Can I adapt it to solve the problem? How?
15 Answers
Reset to default 1831Use 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");
}
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
Use /youregexp/.test(yourString)
if you only want to know whether your string matches the 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
let str = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';
let regexp = /[a-d]/gi;
console.log(str.match(regexp));
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('[email protected]');
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`)
Calling RegExp.prototype.test()
is probably correct, but has a couple caveats:
- It will tell you whether a string "matches" a regex -- i.e. if it "contains a matching sequence" -- not whether the string is an "exact match".
- If a regex is global
/g
it actually stores state, from the MDN:
JavaScript RegExp objects are stateful when they have the global or sticky flags set (e.g., /foo/g or /foo/y). They store a lastIndex from the previous match... https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp/test
This means, for the first point, you need to use anchors, where ^
indicates the start of a string, and $
indicates it's end. So a regex matching the full string "Cat" & nothing else would be: /^Cat$/
And secondly, you cannot reuse regex.test(str)
with a global regex on the same string for this purpose, as it's meaning changes over time. E.g. (and note the failure, despite using different instances of string)
reg = /t/g;
console.log(reg.lastIndex); // 0 -- Never run
console.log(reg.test("Cat")); // true -- Matched "t"
console.log(reg.lastIndex); // 3 -- 3rd character was "t"
console.log(reg.test("Cat")); // false -- no more matches!
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}`;
}
}
}
match()
seems to check whether part of a string matches a regex, not the whole thing. Does it solve the problem? Can I adapt it to solve the problem? How?
Yes, you can. ^
and $
are not needed if you so choose.
The idea is simple: .match()
returns a "match" array. If the first element (i.e. the whole match, or $0
) equals to the string, then we have a full match.
function fullMatch(string, regex) {
const match = string.match(regex);
return match?.[0] === string;
}
Try it:
console.config({ maximize: true });
function fullMatch(string, regex) {
const match = string.match(regex);
console.log(match);
return match?.[0] === string;
}
const string = 'f00bar';
const testcases = [
/\d+c?ba/, // false
/f\d+\w+/, // true
/[0a-z]+/g // false
];
testcases.forEach(
regex => console.log(fullMatch(string, regex))
);
<script src="https://gh-canon.github.io/stack-snippet-console/console.min.js"></script>
Note that this does not work with g
regexes, as this flag causes .match()
to always return a normal array if there is at least one match.
You can, however, use RegExp#exec()
instead:
function fullMatch(string, regex) {
const match = regex.exec(regex);
return match?.[0] === string;
}
Try it:
console.config({ maximize: true });
function fullMatch(string, regex) {
const match = regex.exec(string);
console.log(match);
return match?.[0] === string;
}
const string = 'f00bar';
const testcases = [
/\d+c?ba/, // false
/f\d+\w+/, // true
/[0a-z]+/g // true
];
testcases.forEach(
regex => console.log(fullMatch(string, regex))
);
<script src="https://gh-canon.github.io/stack-snippet-console/console.min.js"></script>
One-liner:
const fullMatch = (string, array) => regex.exec(string)?.[0] === string;
本文标签: javascriptCheck whether a string matches a regex in JSStack Overflow
版权声明:本文标题:javascript - Check whether a string matches a regex in JS - Stack Overflow 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.betaflare.com/web/1736670270a1946883.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
match
doesn't require the entire string to match the regex. But the^
and$
anchors ensure that this regex can only possibly match against the entire string - that's their purpose. – Karl Knechtel Commented Jan 9, 2023 at 23:48