首页 > 解决方案 > 如何改进姓氏的这个正则表达式?

问题描述

我在 raywenderlich 上了解了如何在 swift 中使用正则表达式,他们提供了这个正则表达式来验证姓氏:^[a-z'\\-]{2,20}$. 我知道它在某些情况下完全可以正常工作,但是在测试时我注意到诸如Mc-----Corneyor之类的情况Hey'''''no也得到了验证。

我试图限制撇号和连字符的使用运算符,但它显然不适用于括号表达式。还有一个问题是,无论姓氏中是否有'-,我最多应该有 20 个字符。因此,我不能将撇号和连字符移出括号表达式以实现这一点(或者很可能我只是不知道如何正确地做到这一点)。

那么如何修改该正则表达式,以便仅验证其中包含 2 到 20 个字符的姓氏,并且只有一个' -如果有的话。我认为这是一个非常愚蠢的问题,并且有一个简单的答案,但是由于我刚刚开始学习正则表达式,所以我无法达到它。先感谢您!

标签: regex

解决方案


how can I modify that regex in order to only validate the last name that has from 2 to 20 characters in it and only one ' - if any

任何地方的连字符,但只有一个地方,可以这样完成:

(?i)^(?=.{2,20})[a-z]*-?[a-z]*$

一个连字符只有在一个字母出现后才出现,但只有一个地方,可以这样做:

(?i)^(?=.{2,20})[a-z]+-?[a-z]*$


推荐阅读