普通字符和重音字符的正则表达式,仅在字符串内包含空格和破折号

Regex for plain and accentuated chars, with spaces and dashes only inside the string

我正在尝试想出一个在 JSON 模式中使用的正则表达式。 约束条件:

我有一个蛮力方法:

"^((?![Ð×Þß÷þø])[a-zA-ZÀ-ÿŒœ]{1})((?![Ð×Þß÷þø])[-'a-zA-ZÀ-ÿŒœ ]{0,98})((?![Ð×Þß÷þø])[a-zA-ZÀ-ÿŒœ]{1})$"

这有效..几乎:角色选择符合我的要求。但它不会接受 2 个字符以下的字符串。 那么,不是创建三个组,有没有办法在组的开头和结尾拒绝 space、- 和 '?

奖金问题:写这篇文章我意识到连续的 spaces 或破折号也是不可取的......

你可以用消极的环视来做到这一点,即在它前面向前看,在它之后向后看。而且我们还排除了所有不需要的字符组:

^((?!.*[Ð×Þß÷þø])(?![ '-])[-'a-zA-ZÀ-ÿŒœ ]{0,100})(?<![ '-])$

Demo