在 RegEx 中,我只需要在中间允许空格并防止在开头和结尾有空格

In a RegEx I need to allow spaces only in middle and prevent spaces at beginning and end

我有一个要求,其中我有以下要求来验证名称字段:

  1. 不允许使用以下符号:&(¥)*/+}{¿?¡_^~¨¬;:@!"#&\|-'
  2. 不能包含数字
  3. 开头或结尾不能包含空格

我使用了以下正则表达式:

^[^\s0-9&(¥)*/+}\\{¿?¡_^~¨¬;:@!#&\"|-]*$

它满足了所有条件,但也限制了字符串之间的空格。例如:

限制格式:"firstname lastname"

我需要允许使用上述格式。我只需要限制开头和结尾的空格。

我假设它用于某种 RegularExpressionAttribute 验证,而您只想为此使用单一模式。

您已经有了第一个积木:

[^\s0-9&(¥)*/+}\{¿?¡_^`~¨¬;:@!#&\"|-]

这与集合中定义的字符以外的任何字符匹配。它不匹配空格。如果你用 * 量化并用锚点包裹,则字符串中的任何地方都不允许有空格。因此,您只需要添加一个可选组(使用 *?{x,y} 进行量化,具体取决于您要允许的空格数):

^[^\s0-9&(¥)*/+}\{¿?¡_^`~¨¬;:@!#&\"|-]+(?:\s[^\s0-9&(¥)*/+}\{¿?¡_^`~¨¬;:@!#&\"|-]+)*$
                                        ^^^                                         ^^

如果你还想匹配一个空字符串,用一个可选的非捕获组包装模式:

^(?:[^\s0-9&(¥)*/+}\{¿?¡_^`~¨¬;:@!#&\"|-]+(?:\s[^\s0-9&(¥)*/+}\{¿?¡_^`~¨¬;:@!#&\"|-]+)*)?$
 ^^^                                                                                     ^^

根据需要转义反斜杠。

至于名称中的连字符:允许它与空格放在同一位置可能是合适的:

^(?:[^\s0-9&(¥)*/+}\{¿?¡_^`~¨¬;:@!#&\"|-]+(?:[\s-][^\s0-9&(¥)*/+}\{¿?¡_^`~¨¬;:@!#&\"|-]+)*)?$
                                              ^^^^^