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 A-Z, a-z, 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 ]*(?<! )$
But if the environment doesn't support lookarounds the following regex works in most engines:
^[A-Za-z0-9]+(?: +[A-Za-z0-9]+)*$