如何在单词之间只允许 3 种类型的字符?

How to allow only 3 types of characters between words?

我有一组允许的字符:

  1. 撇号`

  2. 空 space

  3. 破折号-

我正在努力构建一个正则表达式:

一个。每个单词之间只允许出现一次允许的字符(允许任意数量的单词)

E.g.
text-text    --> VALID
text text    --> VALID
text`text    --> VALID

b。允许允许的字符组合,但不能一个接一个

E.g.
text-text`text    --> VALID
text text-text    --> VALID
text`text text    --> VALID
text``text  text  --> INVALID
text`text  text   --> INVALID
text`text -text   --> INVALID

c。不允许以空 space 撇号 ` 或破折号 - 开头,也不允许以撇号 ` 或破折号 - 结尾,但是可以以 [emptyspace]

结尾
E.g.
text[emptyspace]  --> VALID
[emptyspace]text  --> INVALID
`text             --> INVALID
text`             --> INVALID
-text             --> INVALID
text-             --> INVALID

d。完全不允许使用特殊字符

e。完全不允许输入数字

这是我目前所拥有的:https://regex101.com/r/9i3vq2/5

您可以使用

^[a-zA-Z]+(?:[ `-][a-zA-Z]+)* ?$

regex demo

详情

  • ^ - 字符串开头
  • [a-zA-Z]+ - 1+ 个 ASCII 字母
  • (?:[ `-][a-zA-Z]+)* - 0 次或多次重复
    • [ `-] - space、反引号或 -
    • [a-zA-Z]+ - 1+ 个 ASCII 字母
  • ? - 一个可选的 space
  • $ - 字符串结尾。

我会简化 Wiktor 对下一个正则表达式的回答:

^[a-zA-Z]+([ `-][a-zA-Z]+)* ?$

https://regex101.com/r/8wTpUv/1