Überprüfen Sie, ob die Eingabezeichenfolge die Wortgrenze nicht überschreitet

Lesezeit: 4 Minuten

Uberprufen Sie ob die Eingabezeichenfolge die Wortgrenze nicht uberschreitet
Wasem Senjer

Ich möchte die Wörter in einer bestimmten Zeichenfolge zählen, damit ich sie validieren und verhindern kann, dass Benutzer mehr als beispielsweise 100 Wörter schreiben.

Ich habe diese Funktion geschrieben, aber ich glaube nicht, dass sie effektiv genug ist. Ich habe die Explosionsfunktion mit Leerzeichen als Trennzeichen verwendet, aber was ist, wenn der Benutzer zwei Leerzeichen anstelle von einem einfügt? Kannst du mir einen besseren Weg geben, das zu tun?

function isValidLength($text , $length){
  
   $text  = explode(" " , $text );
   if(count($text) > $length)
          return false;
   else
          return true;
}

1647171848 370 Uberprufen Sie ob die Eingabezeichenfolge die Wortgrenze nicht uberschreitet
Francesco Laurent

Vielleicht str_word_count könnte helfen

http://php.net/manual/en/function.str-word-count.php

$Tag  = 'My Name is Gaurav'; 
$word = str_word_count($Tag);
echo $word;

  • Nur ein anderer hat erwähnt str_word_count. Ist es nicht angemessen?

    – Francesco Laurita

    24. Januar 2011 um 20:35 Uhr

  • str_word_count ist SCHLECHT! Es zählt “the” mehrmals, wenn es in größeren Wörtern wie “theme” “theory” usw. enthalten ist. str_word_count ist scheiße und ich sehe es überall auf Stackoverflow

    – giorgio79

    14. Oktober 2011 um 13:35 Uhr


  • @giorgio79 Wie wäre es, eine Alternative anzubieten, anstatt wie ein Verrückter zu schimpfen.

    – Henrik Petterson

    9. August 2015 um 18:35 Uhr

  • Diese Funktion zählt auch Bindestriche als Wörter. Ich fand es besser, diese Funktion zu verwenden, nachdem ich ein preg_replace verwendet hatte, um alle Nicht-Alphazeichen zu ersetzen, z. B.: str_word_count(preg_replace(‘/[^a-z]+/i’, ‘ ‘, $string))

    – SCHILDKRÖTE

    7. Dezember 2015 um 19:08 Uhr


  • str_word_count betrachtet “Yet” und “yet” als zwei verschiedene Wörter. was fair genug ist, denke ich. Dies kann gelöst werden, indem die Saite vor dem Testen abgesenkt wird.

    – prog_24

    14. März 2017 um 8:49 Uhr

Uberprufen Sie ob die Eingabezeichenfolge die Wortgrenze nicht uberschreitet
Amr

Versuche dies:

function get_num_of_words($string) {
    $string = preg_replace('/\s+/', ' ', trim($string));
    $words = explode(" ", $string);
    return count($words);
}

$str = "Lorem ipsum dolor sit amet";
echo get_num_of_words($str);

Dies wird ausgeben: 5

  • Dies ist eigentlich die bisher beste Antwort, die sowohl prägnant ist als auch keinerlei ernsthafte Probleme aufweist. Aber ich würde den Funktionskörper so einfach vereinfachen return count(explode(' ', preg_replace('/\s+/', ' ', trim($string))));.

    – bestell

    30. September 2015 um 22:04 Uhr


  • Warum sollte niemand einfach verwenden preg_split() anstatt die Saite vorzubereiten und dann zu explodieren. Diese Antwort ist nicht ganz so elegant, wie sie sein könnte.

    – mickmackusa

    5. März um 21:32 Uhr

1647171849 120 Uberprufen Sie ob die Eingabezeichenfolge die Wortgrenze nicht uberschreitet
Michael Irigoyen

Sie können die eingebaute PHP-Funktion verwenden str_word_count. Verwenden Sie es wie folgt:

$str = "This is my simple string.";
echo str_word_count($str);

Dadurch wird 5 ausgegeben.

Wenn Sie Sonderzeichen in Ihren Wörtern verwenden möchten, können Sie beliebige zusätzliche Zeichen als dritten Parameter angeben.

$str = "This weather is like el ninã.";
echo str_word_count($str, 0, 'àáã');

Dies gibt 6 aus.

  • @Blender: PHP ist einfach genial. Alles, was Sie wollen, ist in der Standardbibliothek. Nur so wenig makeBlog() Funktion fehlt noch.

    – Nikic

    24. Januar 2011 um 20:33 Uhr

  • @Michael Irigoyen: er meinte wahrscheinlich “warum hat PHP so viele Funktionen?” im rhetorischen Sinne.

    – BoltClock

    24. Januar 2011 um 20:34 Uhr

  • Diese Funktion funktioniert nicht mit Nicht-ASCII-Zeichen (z. B. Buchstaben mit Akzent). str_word_count(“déjà”) gibt 2 aus.

    – Arnaud Le Blanc

    24. Januar 2011 um 20:34 Uhr


  • @ user576875: a) es ist gebietsschemaabhängig, b) Sie können weitere “Wort” -Zeichen angeben.

    – Nikic

    24. Januar 2011 um 20:36 Uhr

  • @nikic LC_ALL=fr_FR.UTF-8, gibt immer noch aus 2 🙂 Der Parameter $charlist funktioniert nicht gut mit Multibyte-Zeichen.

    – Arnaud Le Blanc

    24. Januar 2011 um 20:38 Uhr


Diese Funktion verwendet einen einfachen regulären Ausdruck, um die Eingabe $text auf beliebige Nicht-Buchstaben-Zeichen aufzuteilen:

function isValidLength($text, $length) {
    $words = preg_split('#\PL+#u', $text, -1, PREG_SPLIT_NO_EMPTY);
    return count($words) <= $length;
}

Dadurch wird sichergestellt, dass es korrekt mit Wörtern funktioniert, die durch mehrere Leerzeichen oder andere Nicht-Buchstaben-Zeichen getrennt sind. Es verarbeitet auch Unicode (z. B. Buchstaben mit Akzent) korrekt.

Die Funktion gibt true zurück, wenn die Wortzahl kleiner als $length ist.

str_count_words hat seine Fehler. es zählt Unterstriche als getrennte Wörter wie this_is zwei Wörter:

Sie können die nächste Funktion verwenden, um durch Leerzeichen getrennte Wörter zu zählen, auch wenn mehr als eines zwischen ihnen steht.

function count_words($str){

    while (substr_count($str, "  ")>0){
        $str = str_replace("  ", " ", $str);
    }
    return substr_count($str, " ")+1;
}


$str = "This   is  a sample_test";

echo $str;
echo count_words($str);
//This will return 4 words;

1647171849 570 Uberprufen Sie ob die Eingabezeichenfolge die Wortgrenze nicht uberschreitet
Jeff Lamm

Verwenden Sie preg_split() anstelle von explode(). Split unterstützt reguläre Ausdrücke.

1647171850 200 Uberprufen Sie ob die Eingabezeichenfolge die Wortgrenze nicht uberschreitet
Behzad-Ravanbakhsh

Verwenden substr_count to Zählt die Anzahl aller Vorkommen von Teilzeichenfolgen. Um die Anzahl der Wörter zu finden, setze $needle auf ‘ ‘. int substr_count ( Zeichenfolge $Heuhaufen , Zeichenfolge $Nadel)

$text="This is a test";
echo substr_count($text, 'is'); // 2


echo substr_count($text, ' ');// return number of occurance of words

  • Es gibt ein paar Probleme damit. Es zählt Leerzeichen, keine Wörter. Wenn es also ein Wort gibt, würde es 0 zurückgeben. Und es zählt mehrere Leerzeichen als Wörter (z. B. wenn Sie zwei Leerzeichen nach jedem Punkt setzen, wie es oft gemacht wird).

    – bestell

    30. September 2015 um 21:50 Uhr

997440cookie-checkÜberprüfen Sie, ob die Eingabezeichenfolge die Wortgrenze nicht überschreitet

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy