在RegEx中,我需要仅在中间允许空格并且在开始和结束时防止空格

时间:2017-05-23 07:14:22

标签: javascript c# regex regex-negation

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

  1. 不允许使用以下符号:&(¥)*/+}{¿?¡_^〜¨¬;:@!“#& \ | - '
  2. 不能包含数字
  3. 在开头或结尾处不能包含空格
  4. 我使用了以下正则表达式:

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

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

    它限制格式:“firstname lastname”

    我需要允许以上格式。我只需要在开头和结尾限制空格。

1 个答案:

答案 0 :(得分:3)

我认为它在某种RegularExpressionAttribute验证中使用,你只想为此使用一个模式。

你已经有了第一个构建块:

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

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

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

如果您还要匹配空字符串,请使用可选的非捕获组包装该模式:

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

根据需要逃避反斜杠。

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

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