Schrift
Wiki:Tipp zum Debugging: use Data::Dumper; local $Data::Dumper::Useqq = 1; print Dumper \@var;
[thread]11449[/thread]

RegEx: String darf nur bestimmte Zeichen enthalten

Tags: Ähnliche Threads

Leser: 2


<< >> 7 Einträge, 1 Seite
roli
 2008-03-10 19:14
#106898 #106898
User since
2004-12-31
424 Artikel
BenutzerIn
[default_avatar]
Hi,

ich suche eine Moeglichkeit festzustellen, ob eine Zeichenkette ausschliesslich aus bestimmten Zeichen besteht. Die Loesung ist vermutlich eine RegEx.
Erlaubt sollen die Zeichen von 0-9 sein, sowie ein weiteres, welches der User als Parameter beim Porgrammstart übergibt. Die Laenge der Zeichenkette ist egal, solange nur die erlaubten Zeichen enthalten sind. Das Problem das ich habe ist, was ist wenn der User z.B. den Punkt als weiteres Zeichen waehlt?
Ich habe u.a. folgendes versucht:
Code (perl): (dl )
1
2
3
4
5
6
if($data2check =~ m/[0-9$user_var]/g) {
  print "String ist sauber";
}
else {
  print "String enthaelt nicht erlaubte Zeichen";
}

In $data2check steht der zu pruefende String, in $user_var das Zeichen das der User dem Programm als weiteres erlaubtes Zeichen uebergeben hat.
Roland
--
"Steh vorn, während du fragst;
sitzen soll, wer antwortet."
Aus "Die Edda des Snorri Sturluson" "Gylfis Täuschung" Strophe 2
Froschpopo
 2008-03-10 19:19
#106899 #106899
User since
2003-08-15
2653 Artikel
BenutzerIn
[default_avatar]
ja weil der Punkt eine Bedeutung hat! den musst du vorher quoten, z.B. mit quotemeta()
Oder direkt im regex, z.b. so: \Q$user_var\E
renee
 2008-03-10 19:25
#106900 #106900
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Froschpopo+2008-03-10 18:19:36--
ja weil der Punkt eine Bedeutung hat! den musst du vorher quoten


Aber nicht in Zeichenklassen!

Aber das mit \Q..\E ist absolut richtig, da der Slash z.B. gequotet werden muss.
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
roli
 2008-03-10 19:30
#106902 #106902
User since
2004-12-31
424 Artikel
BenutzerIn
[default_avatar]
Hi,

das eben der Punkt mit seiner Sonderbedeutung das Problem ist, ist mir bewust. Daher auch die explizite Frage danach. Leider ist es mir bislang nicht gelungen die Variable zu quoten, \Q$user_var\E habe ich schon ohne Erfolg versucht (haette ich allerdings auch schreiben sollen).
Roland
--
"Steh vorn, während du fragst;
sitzen soll, wer antwortet."
Aus "Die Edda des Snorri Sturluson" "Gylfis Täuschung" Strophe 2
renee
 2008-03-10 19:40
#106906 #106906
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Code (perl): (dl )
$user_var = quotemeta( $user_var );
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
Linuxer
 2008-03-10 20:44
#106915 #106915
User since
2006-01-27
3890 Artikel
HausmeisterIn

user image
Mein optimierungsbedürftiger QuickHack:

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
#!/usr/bin/perl
use strict;
use warnings;


chomp( my $user_char = <STDIN> );
my $regex = '[a-z' . quotemeta($user_char)  .']+';
$regex = qr{ ^ $regex $ }x;

print $regex, $/;


while ( my $line = <DATA> ) {
    if ( $line =~ $regex ) {
        print "ja: $line\n";
    }
    else {
        print "ne: $line\n";
    }
}
#

__DATA__
string.print
string_print


edit:
Bessere Variante ist von renee genannt worden.
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!
roli
 2008-03-11 11:07
#106934 #106934
User since
2004-12-31
424 Artikel
BenutzerIn
[default_avatar]
Danke, so geht's
Roland
--
"Steh vorn, während du fragst;
sitzen soll, wer antwortet."
Aus "Die Edda des Snorri Sturluson" "Gylfis Täuschung" Strophe 2
<< >> 7 Einträge, 1 Seite



View all threads created 2008-03-10 19:14.