regex - 如何改进姓氏的这个正则表达式?
问题描述
我在 raywenderlich 上了解了如何在 swift 中使用正则表达式,他们提供了这个正则表达式来验证姓氏:^[a-z'\\-]{2,20}$
. 我知道它在某些情况下完全可以正常工作,但是在测试时我注意到诸如Mc-----Corney
or之类的情况Hey'''''no
也得到了验证。
我试图限制撇号和连字符的使用?运算符,但它显然不适用于括号表达式。还有一个问题是,无论姓氏中是否有'或-,我最多应该有 20 个字符。因此,我不能将撇号和连字符移出括号表达式以实现这一点(或者很可能我只是不知道如何正确地做到这一点)。
那么如何修改该正则表达式,以便仅验证其中包含 2 到 20 个字符的姓氏,并且只有一个' -如果有的话。我认为这是一个非常愚蠢的问题,并且有一个简单的答案,但是由于我刚刚开始学习正则表达式,所以我无法达到它。先感谢您!
解决方案
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]*$
推荐阅读
- javascript - 如何在 Python 中使用 Selenium chromedriver 单击按钮
- python - 将文本文件中的特定行数添加到python中的列表中
- django - 没有 UIDB64 的 Django 密码重置流程
- odoo-12 - Odoo Stock 仓库转移问题
- c - 如何将(长)日期转换为 C 中的可读格式?
- python - gunicorn 的超时设置如何工作?
- javascript - 如何在 react-gesture-gallery 中制作的幻灯片的幻灯片上添加按钮或文本
- java - Selenium Webdriver:将测试限制在 Grid 中的特定平台
- c - 当我使用句子时,我无法将元素连接到字符串
- asynchronous - 如何使用 tokio 0.1 和异步函数递归删除目录?