Regex - match a string without leading and trailing spaces

烂漫一生 提交于 2019-12-21 12:21:41

问题


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?


回答1:


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]+)*$



回答2:


depending on your regex engine supporting look around

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

Demo



来源:https://stackoverflow.com/questions/38934328/regex-match-a-string-without-leading-and-trailing-spaces

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!