正则表达式在开始和结束时没有空格但允许在中间

时间:2016-01-24 11:01:50

标签: angularjs regex

我试过的正则表达式是:\^[^\s][a-z\sA-Z\s0-9\s-()][^\s$]\

16 个答案:

答案 0 :(得分:10)

这应该有效:

^[^\s]+(\s+[^\s]+)*$

如果您想包含字符限制:

^[-a-zA-Z0-9-()]+(\s+[-a-zA-Z0-9-()]+)*$

说明:

起始^和结尾$表示字符串。

考虑到我提供的第一个正则表达式,[^\s]表示not whitespace。 所以,如果你看一下,我在开头放置了not whitespace,中间放了一个allow whitespace,最后放了另一个not whitespace

如果要限制在开头和结尾接受哪些字符,请参阅第二个正则表达式。我在开始和结束时允许a-z,A-Z,0-9和()。只允许这些。

正则表达式游乐场:http://www.regexr.com/

答案 1 :(得分:3)

此RegEx在字符串/单词的开头和结尾都不允许使用空格。

^[^\s].+[^\s]$

任何不以空格开头或结尾的字符串都将匹配。

<强>解释

  1. ^表示字符串的开头。
  2. \s表示空格,因此[^\s]表示 NOT white-space 。您也可以使用\S来表示相同的内容。
  3. .表示任何角色都期望换行。
  4. +是一个量词,表示 - 一次或多次。这意味着,+所遵循的角色可以重复一次或多次。
  5. 您可以使用this作为RegEx备忘单。

答案 2 :(得分:3)

如果您有一个要调整的特定模式(例如^[a-zA-Z0-9\s()-]+$),以便不允许在开始和结束处留空格,则可以在模式开始处使用锚定先行:

^(?!\s)(?![\s\S]*\s$)[a-zA-Z0-9\s()-]+$
 ^^^^^^^^^^^^^^^^^^^^ 

在这里

  • (?!\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()-]+$`)

如果您知道没有换行符,[\s\S][^]可能会替换为.

var regex = /^(?!\s)(?!.*\s$)[a-zA-Z0-9\s()-]+$/

请参见regex demo

JS演示:

var strs = ['a  b c', ' a b b', 'a b c '];
var regex = /^(?!\s)(?![\s\S]*\s$)[a-zA-Z0-9\s()-]+$/;
for (var i=0; i<strs.length; i++){
  console.log('"',strs[i], '"=>', regex.test(strs[i]))
}

答案 3 :(得分:2)

如果字符串长度必须至少为1个字符,如果中间允许换行符和任何其他字符,并且第一个+最后一个字符可以真正地除了空格(包括@#$!...)之外的其他字符,那么您正在寻找:

^\S$|^\S[\s\S]*\S$

解释和单元测试:https://regex101.com/r/uT8zU0

答案 4 :(得分:1)

怎么样:

^\S.+\S$

这将匹配任何不以任何空间开头或结尾的字符串。

答案 5 :(得分:1)

^[^\s].+[^\s]$

那就是它!!!!它允许任何包含任何字符的字符串(来自\ n的部分)在开头或结尾没有空格;如果您想要\ n在中间有一个选项s,您必须将.+替换为[.\n]+

答案 6 :(得分:1)

图案=&#34; ^ [^ \ S] + [ - α-ZA-Z \ S] +([ - α-ZA-Z] +)* $&#34; 这将帮助您只接受字符,并且不允许在开头或空格处留出空格。

答案 7 :(得分:1)

使用/^[^\s].([A-Za-z]+\s)*[A-Za-z]+$/。这个。它只接受单词之间的一个空格,开头和结尾不再有空格

答案 8 :(得分:0)

^[^0-9 ]{1}([a-zA-Z]+\s{1})+[a-zA-Z]+$

-用于之间不超过一个空格,开头和末尾没有空格。

^[^0-9 ]{1}([a-zA-Z ])+[a-zA-Z]+$

-用于之间的多个空格,第一个和最后一个空格。

答案 9 :(得分:0)

这是正则表达式,开头和结尾都没有空格,而中间只有一个。也可以使用不超过3个字符的限制:

\^([^\s]*[A-Za-z0-9]\s{0,1})[^\s]*$\-只需删除{0,1}并添加*,以使它们之间有无限的空间即可。

答案 10 :(得分:0)

作为对@Aprillion答案的修改,我更愿意:

^\S$|^\S[ \S]*\S$
  • 它将与开头,结尾或两者都不匹配。
  • 它匹配字符串开头和结尾处非空格字符之间的任意数量的空格。
  • 它也仅匹配一个非空白字符(与此处的许多答案不同)。
  • 它将与字符串中的任何换行符(\ n),\ r,\ t,\ f或\ v不匹配(与Aprillion的答案不同)。我意识到这个问题并不明确,但这是一个有用的区别。

答案 11 :(得分:0)

其他答案对比赛时长进行了限制。可以使用负前瞻和回首来避免这种情况:

^(?!\s)([a-zA-Z0-9\s])*?(?<!\s)$

首先检查第一个字符不是空格^(?!\s)。然后,它以非贪婪的方式捕获a-zA-Z0-9\s所需的字符(*?),并通过检查$之前的字符(字符串/行的结尾)是否不是\s来结束。

检查平台/浏览器中是否支持超前/后退。

答案 12 :(得分:0)

字母和数字只能除以一个空格。另外,开头和结尾都不允许有空格。

/^[a-z0-9]+( [a-z0-9]+)*$/gi

答案 13 :(得分:0)

这对我有用:

^[^\s].+[a-zA-Z]+[a-zA-Z]+$

希望有帮助。

答案 14 :(得分:0)

我发现执行此操作的可靠方法只是指定您要允许第一个字符使用的内容,然后像平常一样检查其他字符。在JavaScript中:

RegExp("^[a-zA-Z][a-zA-Z- ]*$")

因此该表达式在开始时只接受一个字母,然后再接受任意数量的字母,连字符或空格。

答案 15 :(得分:0)

给你,

\b^[^\s][a-zA-Z0-9]*\s+[a-zA-Z0-9]*\b

  • \b 指词边界
  • \s+ 表示允许在中间留一个或多个空格。