简体   繁体   中英

Regex - match a string without leading and trailing spaces

Building an expression that will reject an untrimmed input string.

Have a group of white-listed symbols, including whitespace . But it cannot be used at the first or at the last one position. However, it may be used between any leading and trimming white-listed symbol in any amount.

Have a following expression:

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

... but it doesn't work in several reasons, at least it still matches at leading and trailing position any non-whitespace symbol even if it's not white-listed. Futhermore, it won't match single letter word even if it matches to the expression.

The whitelist is AZ, az, 0-9, whitespace.

Valid case:

Abc132 3sdfas // everything ok

Invalid case #1:

 asd dsadas // leading\trailing space is exist

Invalid case #2:

$das dsfds // not whitelisted symbol at the leading\trailing position

So, how to add a whitespace symbol to the white-list if it isn't the leading or the trailing symbol?

You could use lookarounds to ensure that there are no spaces at both ends:

^(?! )[A-Za-z0-9 ]*(?<! )$

Live demo

But if the environment doesn't support lookarounds the following regex works in most engines:

^[A-Za-z0-9]+(?: +[A-Za-z0-9]+)*$

depending on your regex engine supporting look around

^(?=[A-Za-z0-9])([A-Za-z0-9\s]*)(?<=[A-Za-z0-9])$

Demo

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM