How to make validation with the following conditions? - javascript

Username : at least 5 letters and all lowercase letters
Password : is a combination of 2-digit numbers followed by the symbol "#" or the symbol "&" and followed by 4 uppercase letters
Example :
Username : meatball / jungernaut
Password : 21#YOUR / 74&GOOD
IAM TRY
var slt = "gordonbam"
var sltk = "12#BANA"
var username = /[1-5][A-Z]/g;
var password = /[1-2](#|&)\w[1-4][A-Z]/g;
var result1 = slt.match(username);
var result2 = sltk.match(password);
console.log(result1);
console.log(result2);

Maybe,
^[0-9]{2}[#&][A-Z]{4}$
and
^[a-z]{5,}$
might work OK for pass and username.
If you wish to simplify/modify/explore the expression, it's been explained on the top right panel of regex101.com. If you'd like, you can also watch in this link, how it would match against some sample inputs.
RegEx Circuit
jex.im visualizes regular expressions:
const regex = /^\d{2}[#&][A-Z]{4}$/gm;
const str = `21#YOUR
74&GOOD
74&aaaa
74&AAAz`;
let m;
while ((m = regex.exec(str)) !== null) {
// This is necessary to avoid infinite loops with zero-width matches
if (m.index === regex.lastIndex) {
regex.lastIndex++;
}
// The result can be accessed through the `m`-variable.
m.forEach((match, groupIndex) => {
console.log(`Found match, group ${groupIndex}: ${match}`);
});
}

for Username:
^([a-z]*[a-z]){5}[a-z]*$
for Password:
^[0-9]{2}[#][A-Z]{4}$
try this and if there is any problem then comment me

Related

Regex to find the best matching subsetof a word

I have a list of coma separated words like cooler,bestwishes,congrat. I want to use regex to find the best matching word in this list. e.g Congratulations or Congrats matches congrat in the above list.
I have tried the regex below but it only works if the word in regex is the subset.
const regex = /[^,]*congratulation[^,]*/g;
const str = `this,cart,open,best-wishes,congrat`;
let m;
while ((m = regex.exec(str)) !== null) {
// This is necessary to avoid infinite loops with zero-width matches
if (m.index === regex.lastIndex) {
regex.lastIndex++;
}
// The result can be accessed through the `m`-variable.
m.forEach((match, groupIndex) => {
console.log(`Found match, group ${groupIndex}: ${match}`);
});
}
Is this possible using regex ?
Instead of searching for the target word's substring in a list of words you can search list of words in target word. That will reduce complexity and make it easier.
let words = ["cool","bestwishes","congrat","greatjob","welldone","kudos","thumbsup","keeprocking","rock","congrats"];
let word = "keeprockingbuddy";
let match = getMatchingWords(words,word);
console.log(match); // ["keeprocking", "rock"]
match = getMatchingWords(words,"Congratulations");
console.log(match); // ["congrat"]
function getMatchingWords(words,target){
let ans = [];
words.forEach((w)=>{
let found = target.match(new RegExp(w,"i"));
if(found){
ans.push(w);
}
})
ans = ans.length ? ans:"not found";
return ans;
}
Hope it answers your question.

Regex for parsing multiple conditions for groups

I am trying to split string in 3 different parts with regex.
I can only get function parameters from string but i also want to other parts of the string
const regex = /(\(.*?\))+/g;
const sampleString = 'collection.products(take:12|skip:16)';
const result = sampleString.match(regex)
It gives me (take:12|skip:16)
But i also want to get collection and products
Expected result in match
collection
products
take:12|skip:16
Here, we can alter two expressions together:
(\w+)|\((.+?)\)
which group #1 would capture our desired words (\w+) and group #2 would capture the desired output in the brackets.
const regex = /(\w+)|\((.+?)\)/gm;
const str = `collection.products(take:12|skip:16)`;
let m;
while ((m = regex.exec(str)) !== null) {
// This is necessary to avoid infinite loops with zero-width matches
if (m.index === regex.lastIndex) {
regex.lastIndex++;
}
// The result can be accessed through the `m`-variable.
m.forEach((match, groupIndex) => {
console.log(`Found match, group ${groupIndex}: ${match}`);
});
}
Demo
RegEx Circuit
jex.im visualizes regular expressions:
You can split the string on . and (\(.*?\))+ and then use reduce to get values in desired format
const sampleString = 'collection.products(take:12|skip:16)';
const result = sampleString.split(/\.|(\(.*?\))+/).reduce((op,inp) => {
if(inp){
inp = inp.replace(/[)(]+/g,'')
op.push(inp)
}
return op
},[])
console.log(result)
This splits on what you want.
const sampleString = 'collection.products(take:12|skip:16)';
const result = sampleString.split(/[.()]*([^.()]+)[.()]*/).filter(function (el) {return el != "";});
console.log(result)

I need to write Regx for text field validation, which start with either 'iqn.yyyy-mm.com.' or 'eqn.'

I need to write Regx for text field validation, which start with either 'iqn.yyyy-mm.com.' or 'eqn.'
After this any number of character or numeric value is allowed
Here 'yyyy-mm' is year and month.
If we are just validating the year and month and before and after chars are OK, then this expression might work:
.+\.[\d]{4}-[\d]{2}\..+
If we wish to add more constraints, we can surely do so by modifying these two .+ in the start and end of string. We can also add start and end chars, if necessary.
const regex = /.+\.[\d]{4}-[\d]{2}\..+/gm;
const str = `iqn.2019-10.com
eqn.2019-10.com
eqn.209-10.com`;
let m;
while ((m = regex.exec(str)) !== null) {
// This is necessary to avoid infinite loops with zero-width matches
if (m.index === regex.lastIndex) {
regex.lastIndex++;
}
// The result can be accessed through the `m`-variable.
m.forEach((match, groupIndex) => {
console.log(`Found match, group ${groupIndex}: ${match}`);
});
}
DEMO
RegEx
If this expression wasn't desired, it can be modified/changed in regex101.com.
RegEx Circuit
jex.im visualizes regular expressions:
If you mean is "either 'iqn.yyyy-mm.com.' or 'eqn.'":
pattern = new RegExp('/^(iqn\.\d{4}-\d{2}\.com\.)|(eqn\.)$/');
var str = 'iqn.2019-05.com.';
pattern.test(str); // -> true
var str = 'eqn';
pattern.test(str); // -> true
var str = 'anything else';
pattern.test(str); // -> false
or, if you mean is "either 'iqn.yyyy-mm.com.' or 'eqn.yyyy-mm.com.'":
pattern = new RegExp('/^[ie]qn\.\d{4}-\d{2}\.com\.$/');
var str = 'iqn.2019-05.com.';
pattern.test(str); // -> true
var str = 'eqn.2019-05.com.';
pattern.test(str); // -> true
var str = 'anything else';
pattern.test(str); // -> false
I think this should work :
^[ie]qn\.(?:\d{4}-\d{2}\.\w{2,6})?\.?.+$
Regex101 Link here : Link Here

Getting string parameters using regex

I'm trying to get a regex that can extract data from
BAYARPLN ke 116160029354, SUKSES. Hrg: 84.822. SN: TGK IMUM M SAMIN/R1/450/MAR,APR/Rp.89222/Adm6000/977-1071/047421CA414149E5CEC5. Saldo: 7
and I want to find this value like this...
977-1071
I tried to using parameter regex link this
"/(Adm6000)([^\7]+)/"
But I cant find the string regex 977-1071. Can I ask for help for this?
Did you try like this? see regex https://regex101.com/r/tccJ42/1
const regex = /\d+\-\d+/g; //use \d{3}\-\d{4} if you've digit limit
const str = `BAYARPLN ke 116160029354, SUKSES. Hrg: 84.822. SN: TGK IMUM M SAMIN/R1/450/MAR,APR/Rp.89222/Adm6000/977-1071/047421CA414149E5CEC5. Saldo: 7`;
let m;
while ((m = regex.exec(str)) !== null) {
// This is necessary to avoid infinite loops with zero-width matches
if (m.index === regex.lastIndex) {
regex.lastIndex++;
}
// The result can be accessed through the `m`-variable.
m.forEach((match, groupIndex) => {
console.log(`Found match, group ${groupIndex}: ${match}`);
});
}
If you want to match 977-1071 after /Adm6000/ you could first match /Adm6000/ and then capture in a group not a forward slash one or more times ([^/]+)
\/Adm6000\/([^/]+)
Your value 977-1071 will be in captured group 1:
const regex = /Adm6000\/([^/]+)/;
const str = `BAYARPLN ke 116160029354, SUKSES. Hrg: 84.822. SN: TGK IMUM M SAMIN/R1/450/MAR,APR/Rp.89222/Adm6000/977-1071/047421CA414149E5CEC5. Saldo: 7`;
let match = regex.exec(str);
console.log(match[1]);

Best way to get the word right before a certain word in javascript

I have the following string
this is the string and THIS is the word I want
I've tried using a regex for this:
var to_search = "is"
var regex = "/\S+(?="+to_search+")/g";
var matches = string.match(regex);
And I wanted matches to contain "THIS" (word that comes after the second if) but it does not seem to be working
Any idea? Thanks
regex101.com is a really great site to test your regex and it even generates the code for you.
const regex = /\bis.*(this)/gi;
const str = `this is the string and THIS is the word I want`;
let m;
while ((m = regex.exec(str)) !== null) {
// This is necessary to avoid infinite loops with zero-width matches
if (m.index === regex.lastIndex) {
regex.lastIndex++;
}
// The result can be accessed through the `m`-variable.
m.forEach((match, groupIndex) => {
console.log(`Found match, group ${groupIndex}: ${match}`);
});
}
First you have to double backslashes when using the string form of regexes.
Second, you forgot whitespace in your pattern:
var regex = new RegExp("\\S+\\s+(?="+to_search+")", "g");

Categories

Resources