Regular expression in jquery allow only one match - javascript

Okay, i've got the following problem. I used jquery to test a string with a regular expression. It works all fine, but....
In the Netherlands the zipcodes are 4 digits followed by 2 characters e.g. 1234AB.
Now i use the following regex to find this: [0-9]{4}[A-Z]{2}.
But when someone types 1234AB+948203848 for example. It also return true. And i don't want that! How can i make it return false when it's not 4 digits followed by 2 characters?
Thanks in advance.
JSBIN

Use anchors ^ and $. So your regex would become:
/^\d{4}[A-Z]{2}$/

Just use anchors to indicate the beginning of the word (^) and the end of it ($):
var patt = new RegExp("^[0-9]{4}[A-Z]{2}$");
^ ^
As per your comments, you also want to capitalize the input. For this, you can use .toUpperCase():
Test ---> JSBIN
$(document).ready(function(){
$('[name=postcode]').keyup(function(){
var str = $(this).val().toUpperCase();
var patt = new RegExp("^[0-9]{4}[A-Z]{2}$");
var res = patt.test(str);
console.log(res);
});
});
Alternatively, you can use ^[0-9]{4}[a-zA-Z]{2}$ (note the [a-zA-Z] part) to check the four letters, no matter upper or lowercase.

Related

regular expression for validating fields

Validations i'm trying :
regular expression of : 9999.99 and no spaces (0009.99 it should convert 9.99
Edit :
var regex = '(?!0)\d+(?:\.\d+)?$';
function getValue() {
// passing value 0009.99 and 0009.00 and 100
return document.getElementById("myinput").value;
}
function test() {
alert(regex.test(getValue()));
}
function match() {
alert(getValue().match(regex));
}
Your first and second seems to Work just fine, the third can be achieved with the following regex:
/(?!0)\d+\.\d+$/
It starts by looking forward for zeros (skipping them), then it matches any number of digits followed by a dot and more digits. If you want the digits to be optional you can replace the plus '+' with a star '*'.
Edit:
If you want to allow integers, you can use this regex:
/(?!0)\d+(?:\.\d+)?$/
That makes the dot and the digits after that optional.
BTW: Your jsfiddle does not help in answering.
Edit2:
To create a Regex using quotes you must use the following syntax:
var regex = new RegExp('(?!0)\d+(?:\.\d+)?$');
Edit3:
I forgot to mention, you need to double escape backslashes, it should be:
var regex = new RegExp('(?!0)\\d+(?:\\.\\d+)?$');
Now it should Work directly in your code.

How to replace string between two string with the same length

I have an input string like this:
ABCDEFG[HIJKLMN]OPQRSTUVWXYZ
How can I replace each character in the string between the [] with an X (resulting in the same number of Xs as there were characters)?
For example, with the input above, I would like an output of:
ABCDEFG[XXXXXXX]OPQRSTUVWXYZ
I am using JavaScript's RegEx for this and would prefer if answers could be an implementation that does this using JavaScript's RegEx Replace function.
I am new to RegEx so please explain what you do and (if possible) link articles to where I can get further help.
Using replace() and passing the match to a function as parameter, and then Array(m.length).join("X") to generate the X's needed:
var str = "ABCDEFG[HIJKLMN]OPQRSTUVWXYZ"
str = str.replace(/\[[A-Z]*\]/g,(m)=>"["+Array(m.length-1).join("X")+"]")
console.log(str);
We could use also .* instead of [A-Z] in the regex to match any character.
About regular expressions there are thousands of resources, specifically in JavaScript, you could see Regular Expressions MDN but the best way to learn, in my opinion, is practicing, I find regex101 useful.
const str="ABCDEFG[HIJKLMN]OPQRSTUVWXYZ";
const run=str=>str.replace(/\[.*]/,(a,b,c)=>c=a.replace(/[^\[\]]/g,x=>x="X"));
console.log(run(str));
The first pattern /\[.*]/ is to select letters inside bracket [] and the second pattern /[^\[\]]/ is to replace the letters to "X"
We can observe that every individual letter you wish to match is followed by a series of zero or more non-'[' characters, until a ']' is found. This is quite simple to express in JavaScript-friendly regex:
/[A-Z](?=[^\[]*\])/g
regex101 example
(?= ) is a "positive lookahead assertion"; it peeks ahead of the current matching point, without consuming characters, to verify its contents are matched. In this case, "[^[]*]" matches exactly what I described above.
Now you can substitute each [A-Z] matched with a single 'X'.
You can use the following solution to replace a string between two square brackets:
const rxp = /\[.*?\]/g;
"ABCDEFG[HIJKLMN]OPQRSTUVWXYZ".replace(rxp, (x) => {
return x.replace(rxp, "X".repeat(x.length)-2);
});

regex replace only a part of the match

I want to replace only a part of the string of a regex pattern match. I found this answer but I don't get it...
How do I use substitution?
Example of what I want: keep the first slug digit, only replace others
/09/small_image/09x/ > /09/thumbnail/
1st: unknown digit
2nd: "small_image"
3rd: unknown digit + "x"
Here is what I have so far:
var regexPattern = /\/\d\/small\_image\/\d*x/;
var regexPattern = /\/\d\/(small\_image\/\d*x)$1/; ??
var result = regexPattern.test(str);
if (result) {
str = str.replace(regexPattern, 'thumbnail');
}
var input = "/09/small_image/09x/";
var output = input.replace(/(\/\d+\/)small_image\/\d*x/, "$1thumbnail");
console.log(output);
Explanation:
Put the part you want to keep in parentheses, then refer to that as $1 in the replacement string - don't put $1 in your regex. So (\/\d+\/) means to match a forward slash followed by one or more digits, followed by another forward slash.
(Note that you don't need to escape underscores in a regex.)
Go with
var regexPattern = /(\/\d+\/)small\_image\/\d*x/;
and
str = str.replace(regexPattern, '$1thumbnail');
First, you were missing the +. Because 09 are two digits, you need the regexp to match one or more digits (\ḑ would be exactly one). This is accomplished by \d+
Second, everything you match is being removed at first. To get the /09/ part back afterwards, you have to remember it by putting it into brackets in the regexp (...) and afterwards reference it in the replacement via $1
One could as well create other groups and reference them by $2,$3 ...

jquery REGEX for longstring with azAZ-09-specialchars and |

Hello can someone help me in jquery regex?
whew coz im stack here since last night and finally iv'e decided to ask some help :)
any here's my regex abd the string is in exg variable.. then i want to split the string each
matches[0] = 'eNortjI0sLBScgQDz3yTfK98XCdH59RKc4M8&+SSXFzzXFz3UE9H9yzfYMfCYtPiDLes0NSAXCL3nIj0osJcIvNCjwxLv6z8YhPTXFxv8&KSMNekjIrgqqzQvOJyy0zXNPMoZ4vS0PQS4+S0&IIgU7OssPIolygXJWtcMMMFXCch|eNortjI0sLRScgQDz3yTfK98XCfHXDBDjzx3X4&cXCLXygKn4tzsNCNcJ+NMk+xEM6Ok&OIq1+DcXFxLw8AwjyhHb480lyxTg&LkKv8sXw&zpCSnJE+XYo&EVH&3yKyAsMjEtKxSi4CIqlwigwL&giinXDC3wCiXKBcla1wwpPEmEA==|';
matches[1] = 'eNortjI0NLJScgQDz3yTfK98XCdH9yCPZJ&CiCpD36xcMMuSsLwox6qAwMqkUAPTlChHI8ugvDQL9zzjbBMfT8u8RIOgMgvnHJ9SpzynvFDfQAugijBLv6CgXDBT&0LzKMdI06BIf9OyKGd&U58kN19fV8colygXJWtcMNaqJP8=|';
var regex = /[a-zA-Z]+[0-9]+[/-=&_]+|/g;
var exg = 'eNortjI0sLBScgQDz3yTfK98XCdH59RKc4M8&+SSXFzzXFz3UE9H9yzfYMfCYtPiDLes0NSAXCL3nIj0osJcIvNCjwxLv6z8YhPTXFxv8&KSMNekjIrgqqzQvOJyy0zXNPMoZ4vS0PQS4+S0&IIgU7OssPIolygXJWtcMMMFXCch|eNortjI0sLRScgQDz3yTfK98XCfHXDBDjzx3X4&cXCLXygKn4tzsNCNcJ+NMk+xEM6Ok&OIq1+DcXFxLw8AwjyhHb480lyxTg&LkKv8sXw&zpCSnJE+XYo&EVH&3yKyAsMjEtKxSi4CIqlwigwL&giinXDC3wCiXKBcla1wwpPEmEA==|eNortjI0NLJScgQDz3yTfK98XCdH9yCPZJ&CiCpD36xcMMuSsLwox6qAwMqkUAPTlChHI8ugvDQL9zzjbBMfT8u8RIOgMgvnHJ9SpzynvFDfQAugijBLv6CgXDBT&0LzKMdI06BIf9OyKGd&U58kN19fV8colygXJWtcMNaqJP8=|eNodwdEKgjAUXDDQf&ELnLk57GnXJaiQq4do923YSuXqQKNgXx90zl4yxspE&TUhD21cMNVmqzQkKbdYGVQ6rfzrIy9+nEThYPBvhLU2bpezFs&YSw4H2xdEj+t4mzoVz8Rhuy&i1KTL4BCIx5mcd1tt7Bc16uT4A7goJkI=|eNodyN0KwiAUXDDgd9kb2CzGujoqyeaJFjmKc9fYMCGxkLWfpy&6Lr9UMsbLDP6qyGMdBZzOFRsmq3RYXYN8tW8kUQRdyJ7k4SNq2fntbJwP7QWQ5HOcSeQEKcd0TGzB3XXhY2&wV&6h7a27b17KGQImm9ZOpEhl+y9eOlwnaQ==|eNortjI0NLBScgQDz3yTfK98XCdHv3J3b9P80rwo54pwTy+DgkR3M3eXTMdAY6ekjChHD4PcFJ+KNIMg54Bko9IKxxC&XFyTQl+niqLc7NAkV6PIXCKjgFCD0FQTc4vSCuf0JP+SJIPcspKsKEdj48ys9CiXKBcla1wwr5gmBA==|eNortjI0sLBScgQDz3yTfK98XCdHp1KniMLwiNKglFxc71L3wqrAPEe3UF&PHMuq9BDPXDCflKTkkJDQCIM0s&B8rwxLR5co5ySXbJ9SY7dSH&+SyAqL7JQkV3cPX&NKc9OilKoU51ST&CQ&k6Ki0vIolygXJWtcMKhcMCZa|eNortjI0MLJScgQDz3yTfK98XCdHP5MoxySjJMfIFL&CEsuSUKNQv4LiSre8KKco56IUT3&L0CyfgMIox&IoXCevKFwns&R011THgMKsfLcoZ++MQo&0cNeyIPOqkPTIqrCqCstcMM+C8ChHz8goFyVrXDCmkyQg|eNortjI0NLJScgQDz3yTfK98XCdH&4z8yCin0szUgNwo54zkkBDTJB&TrIBA06S8XFxvr7SKyuDsKOeIZOPcsFA&&4woZ49UU&ekIKMq&7DURCOLimRjX9eKSmdDxxwXZ4&wjDT&lLDsJI&iqpB01yhcJ4v0KJcoFyVrXDA8ZVwnTQ==|eNortjI0MrBScgQDz3yTfK98XCdHLy&LSLfMyOxcIvfIioJit9Lc9NC04NK8NEvncHe&9Byv5MRwy8pC79ywgLT0SJ+qjORCC5PK0oh8i8yU0gpPR9PK7BJXn9SCxDznsEQXb7e8LLMCp+L8tMTyKJcoF7XUioLMotTi+Mw8WwMla1ww8SosXw==|eNortjI0NLRScgQDz3yTfK98XCdHr0pcJ+PAdP9sc+NcIvcyY4PEoNywyuyKzOQsC8twDx9Hg7TUkHyv7BDjMtPg3LwcjyinqlwiNxcXXCeXKFwn7wggEWmck59YHJhZ5Z4ZmF4R5eSfaFnkWuzpVFRglpxcXB7lEuWiZA1cMO+XJv4=|eNortjI0MLdScgQDz3yTfK98XCdHr7LgEpekEmO&xIBgo5CMoOSSKu&QDKPK5OziojS&&Bwvk&BK4yqLCFOjTNNcXC9Tz8C0jLzSkuCMYI88v8KIwORQi&TMQLM8i&B8Sy9Pl7QqXwt&gxQvrzLHKJcoFyVrXDCNviXB|eNortjI0NLRScgQDz3yTfK98XCdHn4pCp5yQxNIkM8MQ97SI0PLkoIqy9DJvZ3PXgPDwgKSIKKfwPKfi&CqvtAqTTNf0YMdwS8cM&yjH7Mr0omTTsLQqg&RcXLOK9Oz00LDgwijHCOeqyuC8KFwnf2fvSMcolygXJWtcMD&GXCfp|eNortjI0NLBScgQDz3yTfK98XCdHF6&gcEdTr5SiNO8KY1wnk1KLIE&&yowox+JcMB&XlGyzQH8&gwKvyIjyEMuyNI+ktMSQ7DDzdAsTA&fyKMckl&KS9HDDgNRKL0+jkCintLCStFwin+LcRC+PXFxcJ7+qwCiXKBcla1wwqjUmMg=='
if(regex.test(exg)) {
var matches = exg.match(regex);
for(var match in matches) {
alert(matches[match]);
}
} else {
alert("No matches found!");
}`
but my regex won't work whew can someone give me a right regex for it? :) please help..
Elias answer is probably the easiest way to do this but if you insist on regex then how about this:
var regex = /[a-zA-Z0-9\/-=&_+]+\|{0,1}/g
Explanation of your regex and why it doesn't work:
[a-zA-Z]+ // Match one or more a-z upper or lower case
[0-9]+ // *THEN* match one or more 0-9
[/-=&_]+ // *THEN* match one or more of these characters
| // *THEN* match a pipe
The problem here is that the letters, numbers and symbols in your search string are mixed together. Therefore they all need to go inside square brackets together so you match one or more of all of them together in any order. Yours puts them in a specific order, letters first, then numbers, then symbols.
The {0,1} on the end matches either zero or one pipe and will therefore catch the last match which does not have a pipe at the end.
Incidentely there's no such thing as JQuery regex. The regex functions are javascript.
erm... how about just using split like so marches = yourString.split('|');
this will return an array of strings, but the pipe char's will not be included, but just concat them to the substring if you need them.
You've missed a slash before |, so this may be what you want?
var regex = /[a-zA-Z0-9\/-=&_]+\|/g;

Javascript regex to check if a value begins with a number followed by anything else

How would i go about doing a regex to see if it begins with a number and any character can follow after. My current expression is
var validaddress = /^[0-9][A-Za-z0-9]+$/;
But this isn't the right way. Im new to this, help anyone?
If you need character(s) after the digit, try this:
var validaddress = /^[0-9].+$/;
If characters after the digit are optional, use this:
var validaddress = /^[0-9].*$/;
What you looking for is: var validaddress = /^\d.*$/;
\d - Matches any digit
.* - Matches any character except newline zero or more times.
Or replace .* with .+, if you are looking for at least 1 character.
Try /^[0-9]/ as the regular expression.
If it only needs to start with a number, I'd only check that...
when you say "any character follow" -- do you mean any alphanumeric character or just anything (i.e. including space, comma, slash etc)?
if it is the latter, how about this:
var validaddress = /^[0-9].+$/;
I suppose this should work
/^\d+.+$/
I would get rid of the $. Also, a '.' would suffice for "any character". This one works for me:
var validaddress = ^[0-9].+;
If you have a string of these values and you want to find each individually try this:
(^|(?<=\W))(\d\w*)
You can then do a loop through each match.
Regexr example
You could also use /^\d/ as the briefest approach.

Categories