I am looking for a regex for allowing
Alphabets case insensitive [a-zA-Z]
hyphen and underscore [-_]
forward and backward slashes [/\\\\]
numbers [0-9]
Hence
var regex = new RegExp('^[a-zA-Z-_][/\\\\]*$');
regex.test('ABC/90-1_AB');
does not work.
Your current regexp (/^[a-zA-Z-_][/\\\\]*$/) is looking for a string that start with a letter, - or _ who are then followed by 0 or more / or \ that end the string.
Put it inside 1 bracket :
'^[-_/0-9a-zA-Z\\\\]*$'
Try:
var regex = new RegExp('[\w\\/-]','i'); // \w matches alphanumeric characters and underscore
regex.test('ABC/90-1_AB'); // returns true
JSFIDDLE
Since you aren't willing to have complex RegExp why making it difficult, when you can just match your needs with explicitly required symbols
Related
I'm trying to validate text with javascript but can find out why it's not working.
I have been using : https://regex101.com/ for testing where it works but in my script it fails
var check = "test"
var pattern = new RegExp('^(?!\.)[a-zA-Z0-9._-]+$(?<!\.)','gmi');
if (!pattern.test(check)) validate_check = false;else validate_check = true;
What i'm looking for is first and last char not a dot, and string may contain [a-zA-Z0-9._-]
But the above check always fails even on the word : test
+$(?<!\.) is invalid in your RegEx
$ will match the end of the text or line (with the m flag)
Negative lookbehind → (?<!Y)X will match X, but only if Y is not before it
What about more simpler RegEx?
var checks = ["test", "1-t.e_s.t0", ".test", "test.", ".test."];
checks.forEach(check => {
var pattern = new RegExp('^[^.][a-zA-Z0-9\._-]+[^.]$','gmi');
console.log(check, pattern.test(check))
});
Your code should look like this:
var check = "test";
var pattern = new RegExp('^[^.][a-zA-Z0-9\._-]+[^.]$','gmi');
var validate_check = pattern.test(check);
console.log(validate_check);
A few notes about the pattern:
You are using the RegExp constructor, where you have to double escape the backslash. In this case with a single backslash, the pattern is ^(?!.)[a-zA-Z0-9._-]+$(?<!.) and the first negative lookahead will make the pattern fail if there is a character other than a newline to the right, that is why it does not match test
If you use the /i flag for a case insensitive match, you can shorten [A-Za-z] to just one of the ranges like [a-z] or use \w to match a word character like in your character class
This part (?<!\.) using a negative lookbehind is not invalid in your pattern, but is is not always supported
For your requirements, you don't have to use lookarounds. If you also want to allow a single char, you can use:
^[\w-]+(?:[\w.-]*[\w-])?$
^ Start of string
[\w-]+ Match 1+ occurrences of a word character or -
(?: Non capture group
[\w.-]*[\w-] Match optional word chars, a dot or hyphen
)? Close non capture group and make it optional
$ End of string
Regex demo
const regex = /^[\w-]+(?:[\w.-]*[\w-])?$/;
["test", "abc....abc", "a", ".test", "test."]
.forEach((s) =>
console.log(`${s} --> ${regex.test(s)}`)
);
As the Title suggests, i want to allow only - / \ (dash, forward slash, backward slash) from special characters. Which is this regex bellow doing, but it doesn't match underscore. How can I do it?
JavaScript: /[^\w\-\/\\]/gi
.NET : ^[\w-\/\\]*$
You may add an alternative in your JS regex:
var pattern = /(?:[^\w\/\\-]|_)/g;
^^^ ^^^
See the regex demo. This pattern can be used to remove the unwanted chars in JS.
In a .NET regex, you may use a character class substraction, and the pattern can be written as
var pattern = #"[^-\w\/\\-[_]]";
See the .NET regex demo
To match whole strings that only allow -, / and \ + letters/digits, use
var pattern = /^(?:(?!_)[\w\/\\-])*$/;
var pattern = #"^[-\w/\\-[_]]*$";
See this JS regex demo and the .NET regex demo.
Here, ^(?:(?!_)[\w\/\\-])*$ / ^[-\w/\\-[_]]*$ match a whole string (the ^ and $ anchors require the full string match) that only contains word, /, \ and - chars.
NOTE: In C#, \w by default matches much more than \w in JS regex. You need to use RegexOptions.ECMAScript option to make \w behave the same way as in JS.
If you want to allow only dash, forward slash and backward slash, then you could omit the ^. It means a negated character class.
You could use \w to also match and underscore and add the hyphen as the first character in the character class.
/[-\w/\\]/g
To match the whole string you could use a quantifier + for the character class to match one or more times and begin ^ and end $ of the string anchors:
^[-\w/\\]+$
Regex demo
const regex = /^[-\w/\\]+$/g;
const strings = [
"test2_/\\",
"test2$_/\\"
];
strings.forEach((str) => {
console.log(str.match(regex));
});
I'm a bit confused between your aim and your code. So, is this what you want ?
Pattern - /[\\\/-]/g
I want to be able to match these types of strings (comma separated, and no beginning or trailing spaces):
LaunchTool[0].Label,LaunchTool[0].URI,LaunchTool[1].Label,LaunchTool[1].URI,LaunchItg[0].Label,LaunchItg[0].URI,csr_description
The rules, in English, are:
1) Zero or more instances of [] where the brackets must contain only one number 0-9
2) Zero or more instances of ., where . must be followed by a letter
3) Zero or more instances of _, where _ must be followed by a letter
I currently have this regex:
/^([a-z]){1,}(\[[0-9]\]){0,}(\.){0,}[a-z]{1,}$/i
I cannot figure out why
"aaaa" doesn't match
furthemore,
"aaaa[0].a" matches, but "aaaa[0]" does not...
anyone know what's wrong? I believe I might need a lookahead to make sure . and _ characters are followed by a letter? Perhaps I can avoid it.
this regex can match "aaaa", try getting value of
(/^([a-z]){1,}(\[[0-9]\]){0,}(\.){0,}[a-z]{1,}$/i).test("aaaa")
"aaaa[0]" does not match, because there is [a-z]{1,} in the end of expression. once "[0]" is matched by (\[[0-9]\]){0,}, trailing [a-z]{1,} must be shown at the end of string
Use optional capture groups. Example: ([a-z])?.
Here is what i ended up with:
/^((\w+)(\[\d+\])?\.?(\w+)?,?)+$/
Shorthands explanation:
* = {0,}
+ = {1,}
\w = [A-Za-z0-9_]
\d = [0-9]
var string = 'abcd+1';
var pattern = 'd+1'
var reg = new RegExp(pattern,'');
alert(string.search(reg));
I found out last night that if you try and find a plus sign in a string of text with a Javascript regular expression, it fails. It will not find that pattern, even though it exists in that string. This has to be because of a special character. What's the best way to find a plus sign in a piece of text? Also, what other characters will this fail on?
Plus is a special character in regular expressions, so to express the character as data you must escape it by prefixing it with \.
var reg = /d\+1/;
\-\.\/\[\]\\ **always** need escaping
\*\+\?\)\{\}\| need escaping when **not** in a character class- [a-z*+{}()?]
But if you are unsure, it does no harm to include the escape before a non-word character you are trying to match.
A digit or letter is a word character, escaping a digit refers to a previous match, escaping a letter can match an unprintable character, like a newline (\n), tab (\t) or word boundary (\b), or a a set of characters, like any word-character (\w), any non-word character (\W).
Don't escape a letter or digit unless you mean it.
Just a note,
\ should be \\ in RegExp pattern string, RegExp("d\+1") will not work and Regexp(/d\+1/) will get error.
var string = 'abcd+1';
var pattern = 'd\\+1'
var reg = new RegExp(pattern,'');
alert(string.search(reg));
//3
You should use the escape character \ in front of the + in your pattern. eg. \+
You probably need to escape the plus sign:
var pattern = /d\+1/
The plus sign is used in regular expressions to indicate 1 or more characters in a row.
It should be var pattern = '/d\\+1/'.
The string will escape '\\' as '\' ('\\+' --> '\+') so the regex object init with /d\+1/
if you want to use + (plus sign) or $ (sigil /dollar sign), then use \ (backslash) as a prefix. Like that:
\$ or \+
How can i match a expression in which first three characters are alphabets followed by a "-" and than 2 alphabets.
For eg. ABC-XY
Thanks in advance.
If you want only to test if the string matchs the pattern, use the test method:
function isValid(input) {
return /^[A-Z]{3}-[A-Z]{2}$/.test(input);
}
isValid("ABC-XY"); // true
isValid("ABCD-XY"); // false
Basically the /^[A-Z]{3}-[A-Z]{2}$/ RegExp looks for:
The beginning of the string ^
Three uppercase letters [A-Z]{3}
A dash literally -
Two more uppercase letters [A-Z]{2}
And the end of the string $
If you want to match alphanumeric characters, you can use \w instead of [A-Z].
Resources:
Regular Expressions
The RegExp Object
Using Regular Expressions with JavaScript
[A-Z]{3}-[A-Z]{2}
if you also want to allow lowercase, change A-Z to A-Za-z.
/^[a-zA-Z]{3}-[a-zA-Z]{2}$/
/\w{3}-\w{2}/.test("ABC-XY")
true
it will match A-Za-z_ though.