Home > Software engineering >  Regex for matching a string with possible spaces at beginning and end of string with a hyphen in the
Regex for matching a string with possible spaces at beginning and end of string with a hyphen in the

Time:01-28

I'm trying to put together a js flavor of regex to match a string like in the following examples where there may be a whitespace at the front or back of the string, or both front and back. But not within the string

Examples:

'Z5LW-KRT2'       MATCH
' Z5LW-krt2'      MATCH
'Z5LW-KRT2 '      MATCH
' Z5LW-KRT2 '     MATCH

' Z5LW-K RT2 '    NO MATCH

So far i have come up with the below which matches if there is no whitespace anywhere, but i cant figure out how to include white space at the beginning or end but not within like in the examples

^[A-Za-z0-9\-] $

CodePudding user response:

You should add \s* to match spaces so the result regex should look like ^\s*[A-Za-z0-9\-] \s*$ and even you can reduce it to ^\s*[\w\-] \s*$ if you want to use the build-in class \w.

CodePudding user response:

Either ^\s*\S \s*$ or ^\s*[A-Za-z0-9\-] \s*$ will do what you need:

^: start of string
\s*: optional whitespace
\S : at least 1 non-whitespace OR
[A-Za-z0-9\-]: match literal character classes
\s*: optional whitespace
$: end of string

let tests = [ 'Z5LW-KRT2'  //     MATCH
            , ' Z5LW-krt2' //     MATCH
            , 'Z5LW-KRT2 ' //     MATCH
            , ' Z5LW-KRT2 ' //    MATCH
            , ' Z5LW-K RT2 ' //   NO MATCH
            ]
            
let regex1 = /^\s*\S \s*$/
let regex2 = /^\s*[A-Za-z0-9\-] \s*$/

for (test of tests) {
  console.log(`[${test}] regex1: ${test.match(regex1)?'MATCH':'NO MATCH'}, regex2: ${test.match(regex2)?'MATCH':'NO MATCH'}`)
}

  • Related