20

I would like to have a regex which matches the string with NO whitespace(s) at the beginning. But the string containing whitespace(s) in the middle CAN match. So far i have tried below

[^-\s][a-zA-Z0-9-_\\s]+$

Regular expression visualization

Debuggex Demo

Above is not allowing whitespace(s) at the beginning, but also not allowing in the middle/end of the string. Please help me.

sanbhat
  • 17,162
  • 6
  • 47
  • 63

9 Answers9

18

In your 2nd character class, \\s will match \ and s, and not \s. Thus it doesn't matches a whitespace. You should use just \s there. Also, move the hyphen towards the end, else it will create unintentional range in character class:

^[^-\s][a-zA-Z0-9_\s-]+$
Rohit Jain
  • 203,151
  • 43
  • 392
  • 509
7

You need to use this regex:

^[^-\s][\w\s-]+$
  • Use start anchor ^
  • No need to double escape \s
  • Also important is to use hyphen as the first OR last character in the character class.
  • \w is same as [a-zA-Z0-9_]
anubhava
  • 713,503
  • 59
  • 514
  • 593
7

If you plan to match a string of any length (even an empty string) that matches your pattern and does not start with a whitespace, use (?!\s) right after ^:

/^(?!\s)[a-zA-Z0-9_\s-]*$/
  ^^^^^^

Or, bearing in mind that [A-Za-z0-9_] in JS regex is equal to \w:

/^(?!\s)[\w\s-]*$/

The (?!\s) is a negative lookahead that matches a location in string that is not immediately followed with a whitespace (matched with the \s pattern).

If you want to add more "forbidden" chars at the string start (it looks like you also disallow -) keep using the [\s-] character class in the lookahead:

/^(?![\s-])[\w\s-]*$/

To match at least 1 character, replace * with +:

/^(?![\s-])[\w\s-]+$/

See the regex demo. JS demo:

console.log(/^(?![\s-])[\w\s-]+$/.test("abc   def 123 ___ -loc-   "));
console.log(/^(?![\s-])[\w\s-]+$/.test("  abc   def 123 ___ -loc-   "));
Wiktor Stribiżew
  • 561,645
  • 34
  • 376
  • 476
6

use \S at the beginning

^\S+[a-zA-Z0-9-_\\s]+$
Sabuj Hassan
  • 36,940
  • 12
  • 73
  • 83
3

This RegEx will allow neither white-space at the beginning nor at the end of. Your string/word and allows all the special characters.

^[^\s].+[^\s]$

This Regex also works Fine

^[^\s]+(\s+[^\s]+)*$
Farida Anjum
  • 439
  • 5
  • 12
1

try this should work

[a-zA-Z0-9_]+.*$
Vicky
  • 127
  • 1
  • 4
1

/^[^.\s]/

  • try this instead it will not allow a user to enter character at first place
  • ^ matches position just before the first character of the string
  • . matches a single character. Does not matter what character it is, except newline
  • \s is space
Saurabh
  • 11
  • 1
1

If your field for user name only accept letters and middle of space but not for begining and end

User name: /^[^\s][a-zA-Z\s]+[^\s]$/

If your field for user ID only accept letters,numbers and underscore and no spaces allow

user ID: /^[\w]+$/

If your field for password only accept letters,number and special character no spaces allow

Password: /^[\w@#&]+$/

Note: \w content a-zA-Z, number, underscore (_) if you add more character, add you special character after \w.

You can compare with user ID and password field in password field im only add some special character (@#&).

India public thoko like

David Leuliette
  • 1,215
  • 14
  • 22
0

I suggest below regex for this,

^[^\s].*[^\s]$

You can try regex in here