使用字符串时如何处理这种情况?

时间:2017-05-18 04:37:43

标签: javascript php arrays string preg-replace-callback

如果不正确,我会创建一个更正单词的网络程序。如果完全不正确,程序会修复错误的单词。如果部分不正确,则无法修复。如何做到这一点,他看了所有可能的选项来纠正单词。我有可能的解决方案。解决方案如下:如果单词部分不正确,则将其完全无效,然后将其固定在数组中的正确变体上。通常,我正在修正大写和小写中存在以下字母的单词:“қ”,“ҷ”,“ӣ”,“ҳ”,“ӯ”,“ғ”

  

数组中包含正确单词的数组:

$correct_words = array
(
1 => "муққаррар",
2 => "рӯғғноққҳо",
3 => "ӯҳдадорӣ",
4 => "озодӣ",
);

替换 数组中的以下字符和创建不正确的版本的字词并创建新的关联数组,将未配置的单词版本传递给数组键,并将正确的变量传递给数组的值。

  

我用正确的单词替换数组中的以下字母:   的 “қ”, “ҷ”, “ӣ”, “ҳ”, “ӯ”, “ғ”

     

以下字母:“к”,“ч”,“и”,“х”,“у”,“г”

结果是以下数组:

$dict = array
(
"муккаррар"  => "муққаррар",
"руггноккхо" => "рӯғғноққҳо",
"ухдадори"   => "ӯҳдадорӣ",
"озоди"      => "озодӣ"
)
  

$ text =“Рафтаниманбадонишгохмуққаррарбарӯғғноққҳодарӯҳдадорӣ   боерииозодӣ。“;

如果用户输入以下字词,该怎么做:

муққаррар
рӯғғноққҳо
ӯҳдадорӣ
озодӣ

在以下选项中

мукқаррар
муқкаррар

рӯғғноққҳо
руғғноққҳо
рӯгғноққҳо
рӯғгноққҳо
рӯғғнокқҳо
рӯғғноқкҳо
рӯғғноққхо
..........
etc combinations...

如果输入了用户一侧的所有类型的组合,那么在任何情况下都需要针对阵列中的正确变体进行校正。

或建议使用 javascript 并在向用户输入数组中的类似字词后立即更正文字

一般,我可以在输入的文字中替换以下字符:“қ”,“ҷ”,“ӣ”,“ҳ”,“ӯ”,“ғ”< /强>

收件人:“к”,“ч”,“и”,“х”,“у”,“г”

$text = "Рафтани ман ба донишгох муққаррар ба рӯғғноққҳо дар ӯҳдадорӣ бо ерии озодӣ.";

$search = array("қ","ҷ","ӣ","ҳ","ӯ","ғ");
$replace = array("к","ч","и","х","у","г");

$result = str_replace($search, $replace, $text);
  

因此,我们的文本将是:

$text = "Рафтани ман ба донишгох муккаррар ба руггноккхо дар ухдадори бо ерии озоди.";

然后我使用此方法更正文字:

$dict = array
(
"муккаррар"  => "муққаррар",
"руггноккхо" => "рӯғғноққҳо",
"ухдадори"   => "ӯҳдадорӣ",
"озоди"      => "озодӣ"
);

$result = preg_replace_callback("/\pL+/u", function ($m) use ($dict) {
    $word = mb_strtolower($m[0]);
    if (isset($dict[$word])) {
        $repl = $dict[$word];
        // Check for some common ways of upper/lower case
        // 1. all lower case
        if ($word === $m[0]) return $repl;
        // 2. all upper case
        if (mb_strtoupper($word) === $m[0]) return mb_strtoupper($repl);
        // 3. Only first letters are upper case
        if (mb_convert_case($word,  MB_CASE_TITLE) === $m[0]) return mb_convert_case($repl,  MB_CASE_TITLE);
        // Otherwise: check each character whether it should be upper or lower case
        for ($i = 0, $len = mb_strlen($word); $i < $len; ++$i) {
            $mixed[] = mb_substr($word, $i, 1) === mb_substr($m[0], $i, 1) 
                ? mb_substr($repl, $i, 1)
                : mb_strtoupper(mb_substr($repl, $i, 1));
        }
        return implode("", $mixed);
    }
    return $m[0]; // Nothing changes
}, $text);

在这种情况下,可以从数组中更正此文本。 但是如果用户错过了单词中的某些字母或者在正确的版本中写了某种字母,那么就会出现问题。

  

我该怎么办?如何处理这样的错误?

0 个答案:

没有答案