Hallo,
On Sun, Nov 03, 2024 at 01:53:50PM +0100,
[email protected] wrote:
02.11.2024 19:05:44 Marc Haber <[email protected]>:
On Thu, 31 Oct 2024 22:21:20 +0100 (GMT+01:00), [email protected] wrote:
Ein erster (defensiver) Stupser:
====
use v5.14;
# ...
qr/[\w\d\.+!\$%&()\]\[;\/{}>*'@_-]+/aai;
====
Hurga. Das ist aber schwere Kost, daran muss ich erstmal kauen. Kann
ein paar Tage dauern.
Jo.
Schaltet /aai nicht Unicode quasi ab, weil \w nur ascii matched?
Kann sein ich habs gefunden:
"\p{Graph}"
Matches any character that is graphic.
Theoretically, this means a character that on a
printer would cause ink to be used.
Evtl. noch
"\p{Word}"
This is the same as "\w", including over 100_000
characters beyond ASCII.
\p{Word} würde mir besser gefallen, das tut aber nicht so wie ich es
denke. Beispielcode weiter unten.
Also:
qr/^[\p{Graph}]+$/aa;
qr/^[\p{L}\p{N}\p{S}\p{P}]+$/aa;
Ergibt das mit /aa einen Sinn? In meinem Beispiel sehe ich keinen
Unterschied zwischen "bare", "/aa" und "/aai".
Hier mal ein Beispielprogramm:
[47/5070]mh@swivel:~/tmp $ cat keks
#!/bin/perl -w
use strict;
use constant {
remax => qr/[\p{Word}\d\.+!\$%&()\]\[;\/{}>*'\@\_-]/aai,
regraph => qr/[\p{Graph}]/aa,
regraphaai=> qr/[\p{Graph}]/aai,
regraphbare=> qr/[\p{Graph}]/,
reword => qr/^[\p{Word}]$/aa,
rewordaai => qr/^[\p{Word}]$/aai,
rewordbare => qr/^[\p{Word}]$/,
};
my $string="homeÿar";
#my $string="/home/ar";
sub sanitize_string {
my ($input, $pattern) = @_;
if ($input =~ qr/^($pattern+)$/) {
return $1;
} else {
return "Input $input does not match $pattern";
}
}
print( sanitize_string( $string, remax ), "\n" );
print( sanitize_string( $string, regraph ), "\n" );
print( sanitize_string( $string, regraphaai ), "\n" );
print( sanitize_string( $string, regraphbare ), "\n" );
print( sanitize_string( $string, reword ), "\n" );
print( sanitize_string( $string, rewordaai ), "\n" );
print( sanitize_string( $string, rewordbare ), "\n" );
[48/5070]mh@swivel:~/tmp $ ./keks
Input homeÿar does not match (?^aai:[\p{Word}\d\.+!\$%&()\]\[;/{}>*'\@\_-]) homeÿar
homeÿar
homeÿar
Input homeÿar does not match (?^aa:^[\p{Word}]$)
Input homeÿar does not match (?^aai:^[\p{Word}]$)
Input homeÿar does not match (?^:^[\p{Word}]$)
[49/5070]mh@swivel:~/tmp $
ÿ ist "Latin small letter y with diaeresis", 0xFF, und sollte auf
\p{Word} matchen? Da es auf \p{Graph} matched scheint UTF-8 Processing
hier eingeschaltet zu sein.#
Ideen? Oder sollte ich mir sowas lieber de.comp.lang.perl gehen?
Grüße
Marc
-- ----------------------------------------------------------------------------- Marc Haber | "I don't trust Computers. They | Mailadresse im Header Leimen, Germany | lose things." Winona Ryder | Fon: *49 6224 1600402 Nordisch by Nature | How to make an American Quilt | Fax: *49 6224 1600421
--- SoupGate-Win32 v1.05
* Origin: fsxNet Usenet Gateway (21:1/5)