Thread Regex für SMS in Javascript (6 answers)
Opened by Gustl at 2019-10-12 19:54

Linuxer
 2019-10-12 20:27
#190697 #190697
User since
2006-01-27
3870 Artikel
HausmeisterIn

user image
Ansatz ohne Regex (auf Perl aufbauend; wie das in JavaScript machbar ist, weiß ich derzeit nicht):

1. Text an Leerzeichen aufsplitten in Fragmente; wenn Du die Leerzeichen behalten willst, fange sie beim Splitten ein

2. Variable für neue SMS vorbereiten

3. Stück für Stück durch die Fragmente wandern. Wenn die Länge von neuer SMS + aktuelles Fragment kleiner als 160 Zeichen ist, neue SMS um Fragment erweitern. Wenn länger, neue SMS speichern oder senden, Variable neu setzen auf den Wert des Fragments.



Schnell gehackter Perl-Code (Optimierungen sicherlich noch möglich):
more (7.6kb):

Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
#! /usr/bin/perl
use strict;
use warnings;

use 5.020;


my $text = do { local $/; <DATA> };

my @parts = split m/(\s+)/, $text;

my @sms_to_send;

my $new_sms = "";
while ( my $p = shift @parts ) {
    # add part if length is valid
    if ( length($new_sms) + length($p) < 160 ) {
        $new_sms .= $p;
    }
    else {
        # store message and reset $new_sms
        push @sms_to_send, $new_sms;
        # prevent starting with whitespaces
        $new_sms = $p =~ m/^\s+$/ ? "" : $p;
    }
}
push @sms_to_send, $new_sms     if $new_sms;

say ">$_<" for @sms_to_send;



__DATA__
Dies ist ein SMS Text mit
Umbruch und anderen Dingen.
Vielleicht ist er sogar zu
lang, um in eine einzelne
SMS mit 160 Zeichen zu
passen.
Wenn sie noch viel laenger
wird, kann es passieren, dass
sie aufgesplittet wird in mehrere
Nachrichten.




edit: Aufzählung korrigiert
Last edited: 2019-10-12 21:38:56 +0200 (CEST)
meine Beiträge: I.d.R. alle Angaben ohne Gewähr und auf Linux abgestimmt!
Die Sprache heisst Perl, nicht PERL. - Bitte Crossposts als solche kenntlich machen!

View full thread Regex für SMS in Javascript