Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Excluding some character from a range - javascript regular expression

To validate only word simplest regex would be (I think)

/^\w+$/

I want to exclude digits and _ from this (as it accept aa10aaand aa_aa now, I want to reject them)

I think it can be gained by

 /^[a-zA-z]+$/

which means I have to take a different approach other than the previous one.

but what if I want to exclude any character from this range suppose I will not allow k,K,p,P or more.

Is there a way to add an excluding list in the range without changing the range.?

like image 670
Saif Avatar asked Feb 02 '15 05:02

Saif


People also ask

What does ?= * Mean in regex?

?= is a positive lookahead, a type of zero-width assertion. What it's saying is that the captured match must be followed by whatever is within the parentheses but that part isn't captured. Your example means the match needs to be followed by zero or more characters and then a digit (but again that part isn't captured).

How do you match a character except in regex?

To match any character except a list of excluded characters, put the excluded charaters between [^ and ] . The caret ^ must immediately follow the [ or else it stands for just itself. The character '. ' (period) is a metacharacter (it sometimes has a special meaning).

What is difference [] and () in regex?

[] denotes a character class. () denotes a capturing group. [a-z0-9] -- One character that is in the range of a-z OR 0-9.


2 Answers

To exclude k or p from [a-zA-Z] you need to use a negative lookahead assertion.

(?![kpKP])[a-zA-Z]+

Use anchors if necessary.

^(?:(?![kpKP])[a-zA-Z])+$

It checks for not of k or p before matching each character.

OR

^(?!.*[kpKP])[a-zA-Z]+$

It just excludes the lines which contains k or p and matches only those lines which contains only alphabets other than k or p.

DEMO

like image 141
Avinash Raj Avatar answered Oct 13 '22 04:10

Avinash Raj


^(?!.*(?:p|k))[a-zA-Z]+$

This should do it.See demo.The negative lookahead will assert that matching word has no p or k.Use i modifier as well.

https://regex101.com/r/vD5iH9/31

var re = /^(?!.*(?:p|k))[a-zA-Z]+$/gmi;
var str = 'One\nTwo\n\nFour\nFourp\nFourk';
var m;

while ((m = re.exec(str)) != null) {
if (m.index === re.lastIndex) {
re.lastIndex++;
}
// View your result using the m-variable.
// eg m[0] etc.
}
like image 29
vks Avatar answered Oct 13 '22 02:10

vks