ugrás a tartalomhoz

Reguláris kifejezés

Blackfriar · 2011. Feb. 7. (H), 20.53
Sziasztok !
A segítségeteket szeretném kérni egy reguláris kifejezéshez.
Nos az lenne a cél, hogy egy PHP kódban az adott kifejezés csak betűket (magyar ékezetesekkel együtt) fogadjon el, tehát se speciális karaktereket (kivétel a pont és a kötőjel), se számokat ne fogadjon el. Kis és nagy betű nem számít, mert előtte az egészet kis betűssé alakítanám.

Előre is köszönöm a fáradozásotokat.
 
1

RTM

Poetro · 2011. Feb. 7. (H), 20.55
2

köszi

Blackfriar · 2011. Feb. 7. (H), 21.07
OK, de mi lesz az ékezetes karakterekkel?
Mert a [a-z] nem fogja elfogadni.
3

nem olvastad el

Poetro · 2011. Feb. 7. (H), 21.24
Úgy érzem nem olvastad el az egészet. Mindenesetre vannak Unicode karaterosztályok is.
De úgy látom az [:alnum:]-nak vannak problémái:
<?php
header("Content-type: text/plain; charset: utf-8");
$s = "Szúrón fájó körülmetélőtű 1234 _-";
$regexes = array(
  '/[[:alnum:]]+/',
  '/[[:alnum:]]+/u',
  '/\pL+/u'
);
foreach ($regexes as $regex) {
  echo 'Matching: "', $regex, '"', "\n";
  if (preg_match_all($regex, $s, $matches)) {
    print_r($matches);
  }
  echo "\n";
}
?>
Matching: "/[[:alnum:]]+/"
Array
(
    [0] => Array
        (
            [0] => Szúrón
            [1] => f�
            [2] => jó
            [3] => k�
            [4] => rülmet�
            [5] => l�
            [6] => t�
            [7] => 1234
        )

)

Matching: "/[[:alnum:]]+/u"
Array
(
    [0] => Array
        (
            [0] => Szúrón
            [1] => fájó
            [2] => körülmetél
            [3] => t
            [4] => 1234
        )

)

Matching: "/\pL+/u"
Array
(
    [0] => Array
        (
            [0] => Szúrón
            [1] => fájó
            [2] => körülmetélőtű
        )

)
4

[a-zöüóőúéáűí.-]+

solkprog · 2011. Feb. 7. (H), 21.35
[a-zöüóőúéáűí.-]+

Ez biztosan csak a-z fogad el, a pontot és kötőjelet beleértve.
5

Óvatosan

Poetro · 2011. Feb. 7. (H), 21.58
<?php
header("Content-type: text/plain; charset: utf-8");
$s = "Szúrón fájó körülmetélőtű 1234 _.- ñš";
echo $s, "\n\n";
$regexes = array(
  '/[a-zöüóőúéáűí.-]+/i',
  '/[a-zöüóőúéáűí.-]+/iu',
);
foreach ($regexes as $regex) {
  echo 'Matching: "', $regex, '"', "\n";
  if (preg_match_all($regex, $s, $matches)) {
    print_r($matches);
  }
  echo "\n";
}
?>
Szúrón fájó körülmetélőtű 1234 _.- ñš

Matching: "/[a-zöüóőúéáűí.-]+/i"
Array
(
    [0] => Array
        (
            [0] => Szúrón
            [1] => fájó
            [2] => körülmetélőtű
            [3] => .-
            [4] => ñš
        )

)

Matching: "/[a-zöüóőúéáűí.-]+/iu"
Array
(
    [0] => Array
        (
            [0] => Szúrón
            [1] => fájó
            [2] => körülmetélőtű
            [3] => .-
        )

)
6

thx

solkprog · 2011. Feb. 7. (H), 22.37
Köszi, ezt nem tudtam...
7

Magyarázat

Poetro · 2011. Feb. 7. (H), 22.52
Mivel alapból a preg függvények bájtonként vizsgálnak és amennyiben UTF-8-at vagy más Unicode formátumot használunk, akkor egyes karakterek több mint 1 bájtot foglalnak. Ebből következik, hogy ha nem UTF-8-ként kezeljük a karaktereket, akkor lehet hogy mást is meg fogunk találni, mint amit keresünk. Tehát, amennyiben UTF-8 karaktereket keresünk, akkor kezeljük őket UTF-8-ként.
8

köszönet

Blackfriar · 2011. Feb. 8. (K), 08.49
Köszönet mindkettőtöknek a segítségért.
Poetro, neked külön köszönöm a sokoldalú, fáradhatatlan segítséged !
És ne haragudj rám, amiért próbálok belekontárkodni ebbe a szép, ám egyálatán nem könnyű szakmába.