Regular expression that allows spaces in a string, but not only blank spaces

后端 未结 6 2087
长发绾君心
长发绾君心 2020-12-01 18:31

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

相关标签:
6条回答
  • 2020-12-01 18:58

    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.

    0 讨论(0)
  • 2020-12-01 18:58

    Try this regular expression:

    ^[^\s]+(\s.*)?$
    

    It means one or more characters that are not space, then, optionally, a space followed by anything.

    0 讨论(0)
  • 2020-12-01 19:01

    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.

    0 讨论(0)
  • 2020-12-01 19:11

    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.

    0 讨论(0)
  • 2020-12-01 19:12

    If we wanted to apply validations only with allowed character set then I tried with USERNAME_REGEX = /^(?:\s*[.\-_]*[a-zA-Z0-9]{1,}[.\-_]*\s*)$/;

    • A string can contain any number of spaces at the beginning or ending or in between but will contain at least one alphanumeric character.
    • Optional ., _ , - characters are also allowed but string must have one alphanumeric character.
    0 讨论(0)
  • 2020-12-01 19:18

    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}$
    
    0 讨论(0)
提交回复
热议问题