【问题标题】:How does one write a regular expression that validates and corrects name strings?如何编写一个验证和更正名称字符串的正则表达式?
【发布时间】:2017-02-28 10:10:19
【问题描述】:

我正在使用 pcre 正则表达式,并且正在尝试清理邮件列表名称。

我正在尝试验证和执行以下规则:

  1. 名称字符串以大写首字母开头,后跟句点和空格。
  2. 最后跟的空格不超过 18 个字符,最后没有空格。

我在这里提供了一些示例:Example Name Strings

1. J. Doe
2. J Doe
3. J.  Doe
4. J  Doe   
5. J. Doe
  1. 数字 1 是有效的名称字符串
  2. 数字 2 缺少第一个初始之后的句点
  3. 数字 3 在句点后面有多个空格。
  4. 数字 4 没有句点,句点后有两个空格,末尾有多余的空格。
  5. 数字 5 在名称字符串的末尾有空格

第一个字符串符合所有条件,但所有其他字符串由于某种原因(没有句点、多余空格等)或其他原因不符合条件。

正则表达式是否可以获取这五个名称字符串并返回 5 个相同的有效名称字符串,如数字 1。

我尝试使用条件正则表达式,但发现这是一条死胡同。

【问题讨论】:

  • 我们当然可以编写一个正则表达式来验证单个字母首字母后跟姓氏。但这会涵盖您的所有情况吗?
  • @TimBiegeleisen 我不确定我是否关注您的问题/评论。
  • 我的评论是说您真正想要验证什么?一个首字母后跟一个名字真的涵盖所有情况吗?
  • @TimBiegeleisen 好的,我明白了。是的,它涵盖了所有情况,但仍然留下了很多潜在的情况......这就是我觉得困难的地方。
  • 如果它仍然留下很多潜在的案例,那么它并没有涵盖所有案例,对吧?

标签: regex


【解决方案1】:

示例案例,可以s/^\s*(\w)\w*\W+(\w+)/\1. \2/

Demo

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-10-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多