小智 14
这应该工作:
^[^\s]+(\s+[^\s]+)*$
Run Code Online (Sandbox Code Playgroud)
如果要包含字符限制:
^[-a-zA-Z0-9-()]+(\s+[-a-zA-Z0-9-()]+)*$
Run Code Online (Sandbox Code Playgroud)
说明:
开头^和结尾$表示字符串.
考虑到我给出的第一个正则表达式,[^\s]+意思是at least one not whitespace.所以,如果你看一下,我\s+在开头放置一个,at least one white space在中间放置一个,在最后放置另一个().
如果要限制在开头和结尾接受哪些字符,请参阅第二个正则表达式.我在开始和结束时允许az,AZ,0-9和().只允许这些.
正则表达式游乐场:http://www.regexr.com/
如果您有一个特定的模式,例如^[a-zA-Z0-9\s()-]+$,您想要调整以便不允许在开始和结束处有空格,您可以使用锚定在模式开始处的前瞻:
^(?!\s)(?![\s\S]*\s$)[a-zA-Z0-9\s()-]+$
^^^^^^^^^^^^^^^^^^^^
Run Code Online (Sandbox Code Playgroud)
这里,
(?!\s)- 如果(因为它是在之后^)紧接在字符串开头有一个空白字符,则匹配失败的负向先行(?![\s\S]*\s$)- 匹配失败的负前瞻,如果(因为它也在 后执行^,之前的模式是不是消耗模式的环视)立即在字符串的开头,有尽可能多的任何 0+ 字符([\s\S]*,等于[^]*),在字符串 ( ) 末尾跟随一个空白字符$。在 JS 中,您可以使用以下等效的正则表达式声明:
var regex = /^(?!\s)(?![\s\S]*\s$)[a-zA-Z0-9\s()-]+$/
var regex = /^(?!\s)(?![^]*\s$)[a-zA-Z0-9\s()-]+$/
var regex = new RegExp("^(?!\\s)(?![^]*\\s$)[a-zA-Z0-9\\s()-]+$")
var regex = new RegExp(String.raw`^(?!\s)(?![^]*\s$)[a-zA-Z0-9\s()-]+$`)
Run Code Online (Sandbox Code Playgroud)
如果您知道没有换行符,[\s\S]则[^]可以替换为.:
var regex = /^(?!\s)(?!.*\s$)[a-zA-Z0-9\s()-]+$/
Run Code Online (Sandbox Code Playgroud)
请参阅正则表达式演示。
JS 演示:
^(?!\s)(?![\s\S]*\s$)[a-zA-Z0-9\s()-]+$
^^^^^^^^^^^^^^^^^^^^
Run Code Online (Sandbox Code Playgroud)
此 RegEx 不允许在字符串/单词的开头和结尾出现空格。
^[^\s].+[^\s]$
Run Code Online (Sandbox Code Playgroud)
任何不以空格开头或结尾的字符串都将被匹配。
解释:
^ 表示字符串的开头。\s表示空格,因此[^\s]表示NOT white-space。您也可以使用\S来表示相同的内容。. 表示除换行符以外的任何字符。+是一个量词,表示一次或多次。这意味着,后面的字符+可以重复一次或多次。您可以将其用作 RegEx 备忘单。
如果字符串必须至少有 1 个字符长,如果中间允许换行符和任何其他字符一起,并且第一个+最后一个字符实际上可以是除空格之外的任何字符(包括@#$!...),那么您正在寻找为了:
^\S$|^\S[\s\S]*\S$
Run Code Online (Sandbox Code Playgroud)
解释和单元测试:https : //regex101.com/r/uT8zU0