在正则表达式中,我只需要在中间允许空格,并在开头和结尾防止空格
Posted
技术标签:
【中文标题】在正则表达式中,我只需要在中间允许空格,并在开头和结尾防止空格【英文标题】:In a RegEx I need to allow spaces only in middle and prevent spaces at beginning and end 【发布时间】:2017-10-23 00:15:13 【问题描述】:我有一个要求,其中我有以下要求来验证名称字段:
-
不允许使用以下符号:
&(¥)*/+¿?¡_^
~¨¬;:@!"#&\|-'
不能包含数字
不能在开头或结尾包含空格
我用过下面的正则表达式:
^[^\\s0-9&(¥)*/+\\\\¿?¡_^~¨¬;:@!#&\"|-]*$
除了限制字符串之间的空格外,它满足所有条件。例如:
限制格式:"firstname lastname"
我需要允许上述格式。我只需要限制开头和结尾的空格。
【问题讨论】:
您是否允许,比如说 □◊≠∞‡?你接受什么符号?说名字必须以字母开头,可以包含字母、数字和空格,必须以数字或字母结尾? 如果您使用 javascript 作为正则表达式,为什么不在测试前简单地使用trim()
函数呢?然后,您可以从排除项中删除空间
First name 中连续 2 个空格可以吗?
我的猜测是,您不应该真正限制开头或结尾的空格。您应该简单地按空格修剪字符串,以便修剪任何以空格开头或结尾的输入。
试试regex101.com/r/pinMdq/1。
【参考方案1】:
我假设它用于某种正则表达式属性验证,而您只想为此使用一个模式。
你已经有了第一个构建块:
[^\s0-9&(¥)*/+\\¿?¡_^`~¨¬;:@!#&\"|-]
这匹配除集合中定义的字符之外的任何字符。它与空格不匹配。如果你用*
量化并用锚换行,字符串中的任何地方都不允许有空格。因此,您只需要添加一个可选组(用*
或?
或x,y
量化,具体取决于您要允许多少个空格):
^[^\s0-9&(¥)*/+\\¿?¡_^`~¨¬;:@!#&\"|-]+(?:\s[^\s0-9&(¥)*/+\\¿?¡_^`~¨¬;:@!#&\"|-]+)*$
^^^ ^^
如果您还想匹配空字符串,请使用可选的非捕获组包装模式:
^(?:[^\s0-9&(¥)*/+\\¿?¡_^`~¨¬;:@!#&\"|-]+(?:\s[^\s0-9&(¥)*/+\\¿?¡_^`~¨¬;:@!#&\"|-]+)*)?$
^^^ ^^
根据需要转义反斜杠。
至于名称中的连字符:允许它与空格位于同一位置可能是合适的:
^(?:[^\s0-9&(¥)*/+\\¿?¡_^`~¨¬;:@!#&\"|-]+(?:[\s-][^\s0-9&(¥)*/+\\¿?¡_^`~¨¬;:@!#&\"|-]+)*)?$
^^^^^
【讨论】:
以上是关于在正则表达式中,我只需要在中间允许空格,并在开头和结尾防止空格的主要内容,如果未能解决你的问题,请参考以下文章
求一个匹配 以指定字符开头,指定字符结尾,中间内容任意的正则表达式
求一个匹配 以指定字符开头,指定字符结尾,中间内容任意的正则表达式