【问题标题】:Apostrophe issues with preg_matchpreg_match 的撇号问题
【发布时间】:2013-09-10 09:13:40
【问题描述】:

您好,这是第一次提问...我有以下 preg_match 模式不起作用,我了解到这可能是 UTF-8 编码问题...或者只是我的编码错误!

以下模式有效,但不适用于撇号(有/没有转义撇号没有区别):

$pattern="/^([A-Za-z \'-])+$/";

以下模式适用于我想要的撇号,但它也允许 &、# 和 ;这并不理想:

$pattern="/^([A-Za-z '\-])+$/";

此模式适用于所有字符,但仅允许在输入文本字符串中出现一个撇号实例(我不明白 *39; 中 0* 的意义):

$pattern="/^([A-Za-z \-])+(\'|&#0*39;)*([A-Za-z \-])+$/";

谁能解释我哪里出错了?我实际上已经阅读了一百页来寻找答案,这让我发疯了!

【问题讨论】:

    标签: php utf-8 preg-match ascii apostrophe


    【解决方案1】:

    你试过了吗:“/[^a-zA-Z0-9'-]+/”

    【讨论】:

    • 谢谢,是的,我试过了。撇号根本无法识别,不幸的是它必须是ASCII码。
    【解决方案2】:

    怎么样:

    $pattern="/^([A-Za-z \-]+(?:\'|&#0*39;)*)*[A-Za-z \-]+$/";
    

    【讨论】:

    • 太棒了,这似乎是一个可行的解决方案!谢谢!为了其他人的利益,我所做的唯一更改是删除最后一个 \- 就在结尾之前,所以像“apple's”这样的词会通过,或者“take-two”会通过,但是“taketwo-”会通过最后的连字符不会。干得好!
    【解决方案3】:

    您可以使用此代码检查输入是否包含 ' 然后将撇号替换为空

    $text = "Welcome I'm Lan Danel";
    if (strpos($text, "'") !== false) {
            $input= str_replace("'","",$txtComment);
    }
    

    输出将是:

    Welcome Im Lan Danel
    

    【讨论】:

      猜你喜欢
      • 2023-03-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-01-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多