【问题标题】:PHP - Matching city/street names in PHP using unicode regexPHP - 使用 unicode 正则表达式在 PHP 中匹配城市/街道名称
【发布时间】:2014-04-04 15:48:56
【问题描述】:

我有这样的表达方式:

'/^([\p{L}\p{Mn}\p{Pd}\'\x{2019}]+|\d+)(\s+([\p{L}\p{Mn}\p{Pd}\'\x{2019}]+|\d+))*$/u'

目标是匹配名称和数字,如“6 de diciembre”或“Mariana de Jesús”(使用数字和 unicode 字符。

问题是它还匹配诸如“6de diciembre”[1] 之类的拼写错误。 不允许在同一个单词中混用数字和字母(不,在这种情况下我们没有像“6th”这样的表达方式)。

问题:我应该使用哪些字符类?我需要数字和这些 un​​icode 字母,但不能混合,不能连接。

注意:我之前发布过一个关于这个主题的类似问题,但问题略有不同,不能期待相同的答案。

[1] 我不敢相信我必须澄清这一点:不应匹配错别字 - 除非明确说明,否则正则表达式是在字符串中查找预期的常规格式

【问题讨论】:

  • 如果您的输入不规则(例如随机/任意),那么您将很难使用正则表达式来匹配该随机性...
  • 我没有说这是随机的。我说它是一个名字,并给了你例子和解释:术语用空格分隔,并且只是数字或(unicode letters|punct.symbols|hyphen)。听起来一点也不随意。
  • 当然不能匹配错别字。这就是正则表达式的用途。
  • 实际阅读这个问题应该会让你得出这样的结论:1. 匹配的拼写错误是一个意想不到的问题(我说的是“问题”并用现在简单的方式解释),2. 举例说明我需要做什么匹配。 3. 用粗体文字解释我不应该匹配的内容。 4. 要求一组字符类告诉“需要数字和这些 un​​icode 字母,但不能混合,不能连接”。

标签: php regex unicode


【解决方案1】:

表达效果很好。我遇到了一个完全不同的问题我的验证处理程序没有被调用

经过一些实验,我注意到如果我减少验证处理函数的长度那么 DRUPAL 7 表单可以将其用作处理程序,而不是默默地丢弃它。是的,女士们,先生们,我的处理程序被命名为toyotaec_form_webform_client_form_trabaja_con_nosotros_validate 并分配为:

`$form['#validate'][] = 'toyotaec_form_webform_client_form_trabaja_con_nosotros_validate';`.

在两边切开“con_notros_”部分使它起作用,并引导我得出这个结论。

.: Drupal 对这些标识符有一个(n 绝对没有意义的)限制,而 PHP 没有。
.: Drupal 会在您分配输入时截断它。
.: Drupal 在函数不存在时不会引发错误(截断的名称不作为函数存在)。

粗鲁(但合乎逻辑)的结论:对于本期和许多以前的问题,我得出结论,drupal 很烂

【讨论】:

    猜你喜欢
    • 2014-01-17
    • 2019-04-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-16
    • 1970-01-01
    • 2022-11-14
    • 2021-12-31
    相关资源
    最近更新 更多