Hi
if( !$data{'passwort'} =~ /[a-z].\d|\d.[a-z]/i )
{
print qq~
Kein Treffer
~;
}
>
> Gibt bei mir "Kein Treffer" für abcedefghijk...
>
> Hab soeben aber gemerkt, dass
>
> ~~~perl
> if( $data{'passwort'} !~ /[a-z].*\d|\d.*[a-z]/i )
> {
> print qq~
> Kein Treffer
> ~;
> }
>
... hingegen so funktioniert, wie ich das gern möchte.
Hm.
interessant gell? Versuche mal "not" statt ! oder Klammer den Ausdruck vorm negieren oder benutze "unless" statt "if":
#~~~perl
$="\n"; # print mit newline
$data='abcedefghijk';
if( ! $data =~ /[a-z].\d|\d.[a-z]/i )
{ print "Match ! =~";}
if( not $data =~ /[a-z].\d|\d.[a-z]/i )
{ print "Match not =~";}
if( ! ($data =~ /[a-z].\d|\d.[a-z]/i) )
{ print "Match !( =~ )";}
unless( $data =~ /[a-z].\d|\d.[a-z]/i )
{ print "Match unless( =~ )";}
if( ! $data == "" )
{ print "Match !$data==Leerstring";}
Bei deiner Schreibweise wird $data erst negiert und damit zum Leerstring.
"!" hat eine verdammt hohe Operatorprezedenz, höher als =~ ...
deswegen lieber "not" nehmen.
Oder noch besser die Lösung mit den zwo einfachen RegExes die mit && verknüpft werden:
~~~perl
print 'ziffer und buchstaben vorhanden' if ( $str=~/[a-z]/i && $str=~/\d/ );
Die ist nämlich sofort lesbar, nach längerer Zeit sofort verständlich und damit WARTBAR. (Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live. -- Damian Conway in "Perl Best Practices")
Alle anderen Regexes bei deiner Fragestellung sind IMHO letztendlich intellektuelle Masturbation und höchstens bei sehr zeitkritischen Anwendungen sinnvoll.
Gruß
Kurt