首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何更改正则表达式以消除连续的相同特殊字符?

如何更改正则表达式以消除连续的相同特殊字符?
EN

Stack Overflow用户
提问于 2021-11-24 08:31:07
回答 3查看 36关注 0票数 1

我的regex用于验证名字和姓氏。可接受的表格如下:

  • 雅各布·韦尔曼
  • 韦曼,雅各布
  • 韦尔曼,雅各布·韦恩
  • O‘’Shaughnessy,杰克L.
  • 约翰·奥肖内西-史密斯
  • 金姆

不可接受的形式如下:

  • 蒂米·奥肖内西
  • 约翰·奥肖内西--史密斯
  • K3vin Malone
  • 警报(“你好”)
  • 从用户中选择*;

我目前的准则如下。

代码语言:javascript
复制
^[\w'\-,.][^0-9_!¡?÷?¿\\+=@#$%ˆ&*(){}|~<>;:[\]]{2,}$

它可以正确地验证所有名称,但以下情况除外:

  • 蒂米·奥肖内西
  • 约翰·奥肖内西--史密斯

原因是正则表达式没有考虑到连续的相同的特殊字符。我怎样才能改变我的准则来考虑这些因素呢?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2021-11-24 10:05:52

可以使用带反向引用的负向查找来断言字符,而不是直接后面跟着相同字符^(?!.*([’-])\1,从而排除连续字符。

请注意,当前模式与至少3个字母长的名称匹配,并且不匹配例如Al之类的名称。

如果您也想匹配,可以在模式中将{2,}更改为+

代码语言:javascript
复制
^(?!.*([’-])\1)[\w',.-][^\n\r0-9_!¡?÷¿\\+=@#$%ˆ&*(){}|~<>;:[\]]{2,}$

Regex演示

匹配名称可能很困难,此页有关于名称的有趣阅读:

错误的程序员相信名字

票数 1
EN

Stack Overflow用户

发布于 2021-11-24 09:56:49

代码语言:javascript
复制
^(:?[^0-9'\-\., _!¡?÷?¿\\+=@#$%ˆ&*(){}|~<>;:[\]]+(:?['-]|, | |\.|\. |$))+$

我使用了你的禁用字符集,并添加了'\-\.,。然后我让他们重复+。我插入了一组允许的除数:(:?['-]|, | |\.|\. |$),并允许重复此模式+

我试过了,这里

票数 0
EN

Stack Overflow用户

发布于 2021-11-24 10:05:36

在验证之前,您可以单独进行。对于Perl regex,要删除其他特殊字符,应该是:

代码语言:javascript
复制
s/(\W)\1+/$1/g

例如:

代码语言:javascript
复制
$ echo "John O’’Shaughnessy--Smith" | perl -C -pe 's/(\W)\1+/$1/g'
John O’Shaughnessy-Smith
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70092855

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档