Kernpunkte
abbreviate()
-Funktion in JavaScript verkürzt die Zeichenfolge intelligent an die angegebene maximale Länge, um sicherzustellen, dass sie nicht in der Mitte des Wortes brechen und unnötige Räume entfernt. In diesem Artikel wird eine einfache und effiziente JavaScript -Funktion namens abbreviate()
eingeführt, deren Hauptfunktion als Name ist: verkürzt die Zeichenfolge intelligent an einer angegebenen Länge. Es stellt sicher, dass es in der Mitte des Wortes nicht abgeschnitten wird und die Zeichenfolge vorbereitet, um überschüssige Räume zu entfernen. Das Folgende ist der Code der abbreviate
-Funktion:
function abbreviate(str, max, suffix) { if ((str = str.replace(/^\s+|\s+$/g, '').replace(/[\r\n]*\s*[\r\n]+/g, ' ').replace(/[ \t]+/g, ' ')).length <= max) { return str; } var abbr = '', str = str.split(' '), suffix = (typeof suffix !== 'undefined' ? suffix : ' ...'), max = (max - suffix.length); for (var len = str.length, i = 0; i < len; i++) { if ((abbr + str[i]).length <= max) { abbr += str[i] + ' '; } else { break; } } return abbr.replace(/[ ]$/g, '') + suffix; }
Diese Funktion erfordert drei Parameter: die ursprüngliche Eingangszeichenfolge, die maximale Ausgangslänge und ein optionales Suffix, das am Ende der Abkürzung hinzugefügt wurde. Wenn das Suffix nicht definiert ist, lautet die Standardeinstellung "..." (ein Raum, gefolgt von drei Punkten), eine gemeinsame und leicht erkennbare Abkürzung.
Funktionsverwendung
Diese Funktion kann in jedem Szenario verwendet werden, in dem die Stringlängen begrenzt werden müssen, als intelligentere Alternative zu einfachen substr
Ausdrücken. Es gibt viele mögliche Anwendungen, wie z. B. Verarbeitungsformulareingaben, Erstellen benutzerdefinierter Tooltips, Anzeigen von E-Mail-Themen in webbasierten E-Mail-Listen oder Vorbereitungsdaten, die über AJAX gesendet werden sollen. Um die Zeichenfolge beispielsweise auf 100 Zeichen zu beschränken und das Standard -Suffix hinzuzufügen, können wir sie so nennen:
str = abbreviate(str, 100);
Dies entspricht diesem Ausdruck substr
:
str = str.substr(0, 96) + " ...";
Aber dies ist ein sehr grober Ansatz, da die Ausgangszeichenfolge häufig in der Mitte des Wortes bricht. Die abbreviate
-Funktion ist so konzipiert, dass sie dies nicht tut, sondern die Zeichenfolge vor dem letzten Wort teilt, anstatt sie in der Mitte des Wortes aufzuteilen. Daher ist die durch generierte Ausgangszeichenfolge normalerweise abbreviate()
kürzer als die durch angegebene maximale Länge, wird jedoch niemals länger sein als er. Die Funktion berücksichtigt auch die für das Abkürzungssuffix erforderlichen Leerzeichen, dh wenn die angegebene maximale Länge 100 beträgt, das Suffix selbst 4 Zeichen beträgt, können wir nur bis zu 96 Zeichen der Haupteingangszeichenfolge verwenden. Sie können angeben, dass es überhaupt kein Suffix gibt, indem Sie eine leere Zeichenfolge übergeben oder wenn Sie die Tag -Zeichenfolge abkürzen möchten, können Sie sie als HTML -Schließetag definieren. Zum Beispiel die folgende Eingabe:
abbreviate("<p>One two three four five</p>", 15, "");
function abbreviate(str, max, suffix) { if ((str = str.replace(/^\s+|\s+$/g, '').replace(/[\r\n]*\s*[\r\n]+/g, ' ').replace(/[ \t]+/g, ' ')).length <= max) { return str; } var abbr = '', str = str.split(' '), suffix = (typeof suffix !== 'undefined' ? suffix : ' ...'), max = (max - suffix.length); for (var len = str.length, i = 0; i < len; i++) { if ((abbr + str[i]).length <= max) { abbr += str[i] + ' '; } else { break; } } return abbr.replace(/[ ]$/g, '') + suffix; }
Wie die Funktion
funktioniert Der Schlüssel zur Funktion abbreviate
ist die Fähigkeit, die Eingangszeichenfolge in ein einzelnes Wort aufzuteilen und dann so viele Wörter wie möglich zu rekombinieren, um die maximale Länge anzupassen. Um effizienter zu sein, müssen wir sicherstellen, dass die Separatoren zwischen Wörtern vorhersehbar sind. Am einfachsten ist es, interne Räume zu minimieren - Neuleitungen und Registerkarten in Räume umwandeln und dann aufeinanderfolgende Räume reduzieren, damit jeder innere Raum die Blöcke ein Raum werden . Natürlich gibt es andere Möglichkeiten, damit umzugehen - zum Beispiel können wir einen flexibleren regulären Ausdruck für die Segmentierung definieren, der alle verschiedenen Arten von Zeichen berücksichtigt, die wir zwischen Wörtern finden. Es gibt sogar ein Wortgrenze ("B") für reguläre Ausdrücke, sodass wir es auch verwenden können. Aber ich fand die Vorverarbeitung von Raum für sich selbst nützlich, insbesondere bei der Verarbeitung von Benutzereingaben. Die Aufteilung durch die Wortgrenze erzeugt nicht die erwarteten Ergebnisse, da Striche, Punkte, Kommas und die meisten Sonderzeichen tatsächlich als Wortgrenzen angesehen werden. Aber ich denke, es ist unangemessen, Wörter durch Interpunktion zu spalten, es sei denn, die Zeichen werden von Leerzeichen gefolgt, so dass Hyphen -Wörter und Code -Snippets nicht in der Mitte geteilt werden. Die erste Aufgabe der Funktion besteht also darin, die Vorverarbeitung von Raum zu erledigen. Wenn das Ergebnis bereits kürzer ist als das durch angegebene Maximum, können wir sie direkt zurückgeben:
str = abbreviate(str, 100);
Wenn wir dies nicht tun, können wir auf Situationen stoßen, in denen Saiten abgekürzt werden, wenn sie nicht abgekürzt werden müssen, z. B.
str = str.substr(0, 96) + " ...";
Wenn es keine erste Bedingung gibt, erhalten wir die Ausgabe der Abkürzung, da der angegebene Maximalwert die Länge des Suffix berücksichtigen muss:
abbreviate("<p>One two three four five</p>", 15, "");
Hinzufügen der ersten Bedingung erzeugt einen nicht modifizierten Ausgang:
<p>One two>
Wenn wir also nicht an diesem Punkt zurückkehren, werden wir weiterhin die abgekürzte Zeichenfolge kompilieren - teilen als die angegebene maximale Länge. Sobald wir das kompilieren, was wir brauchen, können wir die Iteration brechen und dann die verbleibenden Räume vom Ende der Abkürzungszeichenfolge abschneiden, dann das Suffix hinzufügen und schließlich das Ergebnis zurückgeben. Schneiden Sie die verbleibenden Räume vom rechten Ende ab und fügen Sie sie dann mit dem Standardsuffix hinzu, scheint etwas verschwenderisch zu sein, aber dies ermöglicht das Eingeben des Suffix ohne Leerzeichen.
Schlussfolgerung
Dies ist eine einfache, aber intelligente String -Abkürzungsfunktion, die auch die Eingabe vorbereitet, um überschüssige Räume zu entfernen. Nach meiner Erfahrung treten beide Anforderungen normalerweise gleichzeitig auf, weshalb ich diese Funktion so entwickelt habe, dass sie auf diese Weise funktioniert.
(Der FAQ-Teil wird hier aufgrund von Platzbeschränkungen weggelassen. Bei Bedarf kann eine Pseudo-Original-Version des FAQ-Teils separat bereitgestellt werden.)
Das obige ist der detaillierte Inhalt vonIntelligente String -Abkürzung. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!