用于自定义名称验证的正则表达式 - 空格, ', - 只有一次



我正在寻找一个具有一些自定义规则的正则表达式。我不擅长正则表达式,所以这里有一些我正在尝试的规则:

  1. 无空格
  2. 单词之间只允许一个空格
  3. 除了撇号(')和连字符(-)之外没有特殊字符,只有一个在单词中,如奥布莱恩

例子

John Gray Brian
John Brian
John O'Brian
John O-Brian

将此正则表达式(参见正则表达式 101 示例)与 'i' 标志一起使用:

^[a-z]+([-'][a-z]+)?( [a-z]+([-'][a-z]+)?)*$

故障:

^[a-z]+以任意数量的字母开头

([-'][a-z]+)?可能匹配破折号或撇号,后跟更多字母

( [a-z]+([-'][a-z]+)?)*$匹配任意数量的其他名称,每个名称前面都有一个空格,直到字符串的末尾

试试这个:

var r = /^w+(?:['-]w*)?(?: w+(?:['-]w*)?)+$/;
r.test("John Gray")
// Result: true
r.test("    ")
// Result: false
r.test("John O'Brian")
// Result: true
r.test("John O-Brian")
// Result: true
r.test("John  O-Brian")
// Result: false

我建议你通过研究JavaScript正则表达式来学习它是如何工作的;这样你就可以学习它;)。 尝试从这里开始。

最新更新