【问题标题】:Regular Expression to match a name with salution of Mr. or Mrs正则表达式匹配名字与先生或夫人的称呼
【发布时间】:2012-10-24 20:11:22
【问题描述】:

Google 帮不上什么忙,所以我希望这里有人可以帮助我?

preg_match(‘^(MR|MRS)./s[a-z]/s[a-z]$/i’, $_POST[‘fullname’])

我需要一个正则表达式,它允许名字带有 Mr. 或 Mrs. 的称呼,后跟由任意数量的空格分隔的两个文本字符串。我的不工作,我不知道为什么。提前谢谢!

【问题讨论】:

  • 您会期待这样的输入字符串:“伍德先生说不”。因为如果是这样,还有更多工作要做......

标签: php regex validation preg-match expression


【解决方案1】:

正则表达式是无效的语法,它需要以相同的分隔符开始和结束:

preg_match(‘/^mrs?\.\s+[a-z]+\s+[a-z]+$/i’, $_POST[‘fullname’])
............^..........................^

但是要知道,这是一个使用起来很脆弱的正则表达式 - 有多个名字、使用中间名、使用双筒姓氏或在你的名字 - 例如佐伊。

正则表达式解释

/ - start regex
^mr - string starts with mr
s? - optional "s"
\. - period
\s+ - 0 or more whitespace chars (tabs or spaces)
[a-z]+ - 0 or more letters
\s+ - 0 or more whitespace chars (tabs or spaces)
[a-z]+ - 0 or more letters
$ - end of string
/ - end of regex
i - whole regex is case insensitive.

【讨论】:

  • 你应该转义点并使其成为可选
  • 谢谢!这个有效。我知道它应该允许其他角色,但这是我必须遵守的规则。
【解决方案2】:

[A-Z]?[a-zA-Z]{1,30}[ ]?[.]?[']?[ ]?[a-zA-Z]{1,30}[ ]?[. ]?[']?[ ]?[a-zA-Z]{0,30}[ ]?[a-zA-Z]{0,30}

适用于以下名称:

  • 博士。詹姆斯·马修
  • 詹姆斯·马修
  • 博士。詹姆斯·马修·约翰
  • 詹姆斯先生
  • 真的

还有更多...

【讨论】:

    【解决方案3】:

    试试这个:

    preg_match("/^(MR|MRS)\.?(\s*\w*)+$/i", $_POST[‘fullname’])
    

    如果点不是可选的.. 删除“?”

    【讨论】:

    • 匹配 MR 末尾的尾随点。 ?
    • 是的,谢谢,忘记了...添加了 .在 MR 之后(感谢 -1 ...)
    • 对于它的价值,我没有 -1 你的答案 - 我倾向于只在答案明显严重错误时投反对票。如果我认为您可能忽略了某些内容,我将添加评论。
    • 我投了反对票 - 您仍然缺少正则表达式的前导分隔符 - 使答案语法无效;运行它只会抛出一个错误。另外,使用 * 意味着它匹配“先生”。 - 这不是一个名字。
    猜你喜欢
    • 2021-11-21
    • 1970-01-01
    • 1970-01-01
    • 2016-01-22
    • 1970-01-01
    • 2014-07-14
    • 2016-03-25
    • 2014-01-17
    • 1970-01-01
    相关资源
    最近更新 更多