negating java regex

I’m using these lines to check if a String does not contain only "special" characters:

String regex = "^[^a-zA-Z0-9]*$";

if(!someinput.matches(regex)){
    System.out.println("your input isn't made of only special characters");
}

But I want the regex to not necessitate the "!" negation before it, so as to make it self-sufficient.

I’ve tried the look ahead "^(?![^a-zA-Z0-9]*)$" , but It doesn’t work.
Why doesn’t it work and what should I do?

EDIT: SOLVED BY COMMENTS

So, I was looking for a regex that identifies any string containing at least one alphanumeric character.

My first and second try both looked at it from a "negation" point of view: I was going at the problem by trying to find a regex that identifies all those strings whose characters aren’t special.

But the cleanest solution was to find all those strings which contain at least one alphanumeric character.

So I needed a semantic inversion?

Anyway I like this solution proposed by @Bohemian

matches(".*[A-Za-z0-9].*")

>Solution :

Try this:

String regex = ".*[a-zA-Z0-9].*"; // a letter/digit is somewhere in the string 

if (!someinput.matches(regex)) {
    System.out.println("your input isn't made of only special characters");

}

Leave a Reply