繁体   English   中英

正则表达式不允许没有前缀或后缀的特殊字符

[英]Regex to not allow special character without prefix or suffix

我正在为以下验证字符串编写正则表达式。 我写了以下正则表达式。

^[^\s]+[a-z]{0,}(?!.* {2})[ a-zA-z]{0,}$

它验证为

  1. 开头没有空格。
  2. 不允许有两个连续的空格。
  3. 问题是它允许一个特殊字符。 它不应允许特殊字符,除非它以字母数字字符为后缀或前缀。

例子:

# -> 不允许。

#AA#A23A是允许的。

一种选择是使用负前瞻断言字符串不包含单个“特殊”字符或 2 个彼此相邻的特殊字符。

^(?!.*[^a-zA-Z0-9\s][^a-zA-Z0-9\s])(?!.*(?:^| )[^a-zA-Z0-9\s](?!\S))\S+(?: \S+)*$

解释

  • ^字符串开始
  • (?!负前瞻,断言右边不包含
    • .*[^a-zA-Z0-9\\s][^a-zA-Z0-9\\s]匹配除 a-zA-Z0-9 以外的 2 个字符或相邻的空白字符
  • )关闭前瞻
  • (?!负前瞻,断言右边不包含
    • .*(?:^| )[^a-zA-Z0-9\\s](?!\\S)匹配除 a-zA-Z0-9 以外的单个字符或空白字符
  • )关闭前瞻
  • \\S+(?: \\S+)*匹配 1+ 个非空白字符并可选择重复一个空格和 1+ 个非空白字符
  • $字符串结尾

正则表达式演示

请省略正则表达式中的“$”符号,因为它代表句子的结尾。

^[^\s]+[a-z]{0,}(?!.* {2})[ a-zA-z]{0,}

因此,当将上述正则表达式应用于以下内容时,它只会找到“#”。

#AA# A2 3A

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM