我有一个要求,其中我有以下要求来验证名称字段:
&(¥)*/+}{¿?¡_^
〜¨¬;:@!“#& \ | - '我使用了以下正则表达式:
^[^\\s0-9&(¥)*/+}\\\\{¿?¡_^~¨¬;:@!#&\"|-]*$
它满足所有条件,除了它还限制字符串之间的空格。例如:
它限制格式:“firstname lastname”
我需要允许以上格式。我只需要在开头和结尾限制空格。
答案 0 :(得分:3)
我认为它在某种RegularExpressionAttribute验证中使用,你只想为此使用一个模式。
你已经有了第一个构建块:
[^\s0-9&(¥)*/+}\\{¿?¡_^`~¨¬;:@!#&\"|-]
这匹配任何char,但匹配集合中定义的char。它与空格不匹配。如果用*
量化并用锚点换行,则字符串中的任何位置都不允许有空格。因此,您只需添加一个可选组(使用*
或?
或{x,y}
进行量化,具体取决于您希望允许的空格数量):
^[^\s0-9&(¥)*/+}\\{¿?¡_^`~¨¬;:@!#&\"|-]+(?:\s[^\s0-9&(¥)*/+}\\{¿?¡_^`~¨¬;:@!#&\"|-]+)*$
^^^ ^^
如果您还要匹配空字符串,请使用可选的非捕获组包装该模式:
^(?:[^\s0-9&(¥)*/+}\\{¿?¡_^`~¨¬;:@!#&\"|-]+(?:\s[^\s0-9&(¥)*/+}\\{¿?¡_^`~¨¬;:@!#&\"|-]+)*)?$
^^^ ^^
根据需要逃避反斜杠。
至于名称中的连字符:允许它与空格在同一个地方可能是合适的:
^(?:[^\s0-9&(¥)*/+}\\{¿?¡_^`~¨¬;:@!#&\"|-]+(?:[\s-][^\s0-9&(¥)*/+}\\{¿?¡_^`~¨¬;:@!#&\"|-]+)*)?$
^^^^^