是否可以在单个正则表达式中接受和否定特定格式?

时间:2016-08-25 04:51:45

标签: regex

我正在尝试写一个正则表达式来否定123-45-6789和123456789(确切的9位数字但它可以是0-9之间的任何组合)格式并允许其他所有字母字符,除了精确的9位数之外的任何数字,特殊字符但没有前导和尾随空格。

这是我的正则表达式,

^(!~(\d{3}-?\d{2}-?\d{4})&([0-9]{?!9}))|([a-zA-Z].\S)$

这符合我的大部分条件,除了字母数字组合,更小/更大的9位数字。

enter image description here

任何建议都会有所帮助。

1 个答案:

答案 0 :(得分:3)

您可以使用此正则表达式:

^(?!\d{3}-?\d{2}-?\d{4}$|\s|.*\s$).*$

请参阅Regex101上的演示。

这使用\s来排除以空格开头或结尾的文本。如果你真的只想在那里排除空格,但是会接受制表符,不间断空格,换行符......然后用普通空格\s替换

接受一个连字符

当特定位置有0,1或2个连字符时,上述内容不接受9位数字。如果必须接受带有1个连字符的情况,请执行以下操作:

^(?!\d{3}-\d{2}-\d{4}$|\d{9}$|\s|.*\s$).*$