我正在寻找一个具有一些自定义规则的正则表达式。我不擅长正则表达式,所以这里有一些我正在尝试的规则:
- 无空格
- 单词之间只允许一个空格
- 除了撇号(
'
)和连字符(-
)之外没有特殊字符,只有一个在单词中,如奥布莱恩
例子
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正则表达式来学习它是如何工作的;这样你就可以学习它;)。 尝试从这里开始。