I need to write a regular expression for form validation that allows spaces within a string, but doesn\'t allow only white space.
For example - \'Chicago Heigh
It's very simple: .*\S.*
This requires one non-space character, at any place. The regular expression syntax is for Perl 5 compatible regular expressions, if you have another language, the syntax may differ a bit.
Try this regular expression:
^[^\s]+(\s.*)?$
It means one or more characters that are not space, then, optionally, a space followed by anything.
You could use simple:
^(?=.*\S).+$
if your regex engine supports positive lookaheads. This expression requires at least one non-space character.
See it on rubular.
Just use \s*
to avoid one or more blank spaces in the regular expression between two words.
For example, "Mozilla/ 4.75"
and "Mozilla/4.75"
both can be matched by the following regular expression:
[A-Z][a-z]*/\s*[0-9]\.[0-9]{1,2}
Adding \s*
matches on zero, one or more blank spaces between two words.
If we wanted to apply validations only with allowed character set then I tried with USERNAME_REGEX = /^(?:\s*[.\-_]*[a-zA-Z0-9]{1,}[.\-_]*\s*)$/;
., _ , -
characters are also allowed but string must have one alphanumeric character.The following will answer your question as written, but see my additional note afterward:
^(?!\s*$)[-a-zA-Z0-9_:,.' ']{1,100}$
Explanation: The (?!\s*$)
is a negative lookahead. It means: "The following characters cannot match the subpattern \s*$
." When you take the subpattern into account, it means: "The following characters can neither be an empty string, nor a string of whitespace all the way to the end. Therefore, there must be at least one non-whitespace character after this point in the string." Once you have that rule out of the way, you're free to allow spaces in your character class.
Extra note: I don't think your ' '
is doing what you intend. It looks like you were trying to represent a space character, but regex interprets '
as a literal apostrophe. Inside a character class, ' '
would mean "match any character that is either '
, a space character, or '
" (notice that the second '
character is redundant). I suspect what you want is more like this:
^(?!\s*$)[-a-zA-Z0-9_:,.\s]{1,100}$