Regulární výraz pro kontrolu e-mailu - oprava

Po upozornění Jakubem Vránou jsem provedl opravu regulárního výrazu pro kontrolu e-mailu.

Chyba byla v tom, že neprošly e-mailové adresy typu a@a.a.cz nebo třeba i a@a.a.a.a.cz, které však mohou být platnými e-mailovými adresami. Jednoduchou úpravou výrazu by měl být tento nedostatek odstraněn. Více viz výše uvedený odkaz.

Google logo a Den země

Internetový vyhledávač Google má dnes opět nové logo a sice u příležitosti 35. výročí Dne země, které připadá právě na dnešek (22.4.2005).

Více ke Dni země viz například http://www.earthday.net/ (anglicky). Dnešní Google logo viz screenshot.

Co je validní e-mailová adresa?

Po napsání článku Regulární výraz pro kontrolu e-mailu by bylo asi dobré, abych trošku rozpitval ten kód, který byl v článku uveden.

Co je e-mailová adresa

Takže kód vychází z definice e-mailové adresy, tak jak je popsána v dokumentu RFC 822 (RFC 2822). Neovládám moc angličtinu (vlastně skoro vůbec), ale sem tam něčemu rozumím a podle zmíněného dokumentu se dá zjednodušeně říct, že e-mailová adresa se skládá ze tří částí:

  • část před zavináčem
  • zavináč
  • část za zavináčem

Část před zavináčem

Tato část se může obsahovat jedno nebo více tzv. slov navzájem oddělených tečkou. Tečka se nesmí vyskytovat těsně před znakem zavináč a nesmí se opakovat vícekrát za sebou.

Kód pro kontrolu části před zavináčem je následující:

$regex = '^[-a-z0-9!#$%&'*+/=?^_<{|}~]+' .
'(.[-a-z0-9!#$%&'*+/=?^_<{|}~]+)*'

Slovem je myšlena souvislá sekvence povolených znaků (v případě části za zavináčem povolených znaků mimo speciální znaky).

Část za zavináčem

Tato část může obsahovat jedno nebo více slov navzájem oddělených tečkou. Tečka se nesmí vyskytovat těsně za znakem zavináč a nesmí se opakovat vícekrát za sebou. Nejsou povoleny speciální znaky (viz níže). Za poslední tečkou musí následovat slovo o délce minimálně dva znaky, které označuje adresu Top Level Domény (TLD).

Kód pro kontrolu části za zavináčem je následující:

'[a-z0-9-]+(.[a-z0-9-]{2,})+$';

Povolené znaky

Povolenými znaky jsou skoro všechny tisknutelné znaky, tedy písmena oabecedy A-Z, číslice 0-9 a pomlčka.

Speciální znaky

Speciální znaky jsou podskupinou povolených znaků a mohou být použity jen v části před zavináčem. Jedná se o následující znaky:

!#$%&'*+/=?^_<{|}~

Závěrem

Předpokládám, že řádek kódu s kontrolou zavináče není třeba popisovat. Řětězec je nutné kontrolovat pomocí funkce eregi, která nerozlišuje velikost písmen.

Nevýhodou řetězce je to, že nekontroluje existenci TLD, ale pouze délku posledního slova za poslední tečkou (což je sice chyba, ale zanedbatelná). Dalo by se to udělat tak, že by řetězec obsahoval seznam všech dostupných řetězců TLD, ale nevýhodou tohoto řešení by bylo to, že pokud by se seznam řetězců TLD změnil, musel by se změnit i kontrolní řetězec. Zjišťování změn v seznamu TLD je poměrně netriviální záležitostí a proto si myslím, že použité řešení je lepší (sice nepřesné, ale zato univerzální).

První pohled na Panasonic Lumix DMC-LZ1

Právě mi přivezli můj první digitální fotoaparát, Panasonic Lumix DMC-LZ1.

Je to 4 Mpx foťák s šestinásobným optickým zoomem a stabilizátorem obrazu. Zatím jsem si jen tak vyzkoušel pár fotek a vypadaly celkem dobře. Než začnu fotit něco užitečnýho (jak pro koho), tak se s ním musím nejdřív naučit zacházet. K tomu budu mít příležitost ještě dnes, protože jdu brzy domů, takže si hned po příjezdu domů začnu studovat manuál.

Zatím můžu říct, že je to docela lehký foťák s celkem snadným ovládáním, pokud to můžu po těch několika málo minutách posoudit. Možná o něm ještě někdy něco napíšu, až se s ním blíž seznámím. Zatím jsem se chtěl jen pochlubit :o)

UPDATE:
Napsal článek zkušenosti s fotoaparátem Panasonic Lumix DMC-LZ1.

Seznam zvětšuje schránku...

..., ale proč s tím otravuje zrovna mě? Mám na Seznamu zaregistrovány asi tři (možná čtyři) e-mailové adresy (z různých důvodů), ale ani jednu z nich nehodlám převádět na nějakou větší velikost (k ničemu bych to nevyužil).

Jenže už mi přišel druhý mail od seznamu s tím, že zvětšují velikost. První odstavec mailu zní:

Všem uživatelům, kteří mají na Seznamu 1.000MB schránku, dnes postupně zvětšujeme velikost schránky na rovných 2.000MB, což je zhruba 2GB. Spolu s maximální velikostí přílohy 13MB, kterou již poskytujeme, se tak Seznam E-mail stává jednou z nejvelkorysejších e-mailových služeb vůbec. Kromě toho pro Vás již od února vyvíjíme nové www rozhraní, které bychom chtěli spustit do konce května.

Jenže já nemám ani jednu z těch schránek zvětšenou na 1.000MB, tak proč mě s těma zprávama obtěžují? Mě to nezajímá. Velkou schránku k ničemu nepotřebuju, protože si všechny zprávy stahuju do Outlooku přes POP3, takže můžu mít schránku teoreticky velkou jak chci (třeba 10Giga — jen podle velného místa na disku).

Už mě ten boom s těma velkýma schránkama začíná štvát. No ale co. Počkám ještě na ten zbývající mail (možná přijdou ještě dva), opět ho smažu a pak snad už budu mít zase klid, alespoň do té doby, než zase Seznam přijde s něčím novým.

Problém s instalací a konfigurací MySQL vyřešen

Za pomoci Googlu a stránek www.mysql.com se mi nakonec pořařilo můj problém, popsaný v předchozím článku, vyřešit.

Konktétně mi pomohla stránka MySQL Reference Manual :: A.2.3 Client does not support authentication protocol, kde byl uveden následující kód:

mysql> UPDATE mysql.user SET Password = OLD_PASSWORD('newpwd')
    -> WHERE Host = 'some_host' AND User = 'some_user';
mysql> FLUSH PRIVILEGES;

Při použití tohoto kódu se správnými parametry (tedy správný uživatel, heslo a host) se již podařilo připojení i na mém lokálním počítači. Problém byl v tom, že jsem měl v minulosti nainstalovanou (ale nerozchozenou) starší verzi MySQL. Konečně se mohu začít učit pracovat s MySQL. Huráááá :o)

Problém s instalací a konfigurací MySQL

Mám problém s instalací MySQL, přesněji řečeno instalace se mi zdařila, ale nedaří se mi k databázi připojit na lokálním počítači ve skriptu PHP.

Mám následující konfiguraci:

  • Windows XP (SP2)
  • Server IIS (verze 5.1)
  • PHP 4.3.11
  • MySQL 4.1.11

Instalace MySQL proběhla v podstatě bez problémů, nainstaloval jsem to pomocí instalačního programu, který jsem si stáhl ze stránek www.mysql.com a nainstaloval jsem to do adresáře C:MYSQL. Při konfiguraci jsem nastavil, že chci používat charset cp1250.

Poté jsem si ze stejných stránek stáhl a nainstaloval program MySQL Administrator. Pomocí něj se mi podaří k databázi bez problémů připojit a pracovat s ní (spustit řádkového klienta mysql.exe, vytvářet databáze, tabulky, atd.). Vytvořil jsem si testovací databázi mojedata a v ní tabulku uzivatele:

CREATE TABLE `uzivatele` (
  `id_uzivatele` mediumint(8) unsigned NOT NULL auto_increment,
  `uziv_jmeno` varchar(30),
  `jmeno` varchar(30) NOT NULL,
  `prijmeni` varchar(50) NOT NULL,
  `email` varchar(255),
  `heslo` varchar(50) NOT NULL,
  `datum` datetime NOT NULL,
  PRIMARY KEY  (`id_uzivatele`)
);

Poté jsem si vytvořil skript, kterým jsem se chtěl připojovat k databázi:

<?php
 define('DB_UZIVATEL', 'root');
 define('DB_HESLO', 'heslo'); //tady jsem dal správné heslo
 define('DB_NAZEVDATABAZE', 'mojedata');
 define('DB_HOSTITEL', 'localhost');

 $dbc = @mysql_connect(DB_HOSTITEL,DB_UZIVATEL,DB_HESLO) OR die('Nepodařilo se připojit k databázi MySQL: ' . mysql_error());
 echo '<p>Připojení se podařilo.</p>'; //pro testovaci ucely
  @mysql_select_db(DB_NAZEVDATABAZE) OR die('Nelze vybrat databázi: ' . mysql_error());
 echo '<p>Databázi se podařilo vybrat.</p>'; //pro testovaci ucely
?>

Ten však po spuštění v prohlížeči nefunguje a hlásí mi to nějaké divné chyby, konkrétně toto:

File 'c:mysqlsharecharsets?.conf' not found (Errcode: 22) Character set '#26' is not a compiled character set and is not specified in the 'c:mysqlsharecharsetsIndex' file Nepodařilo se připojit k databázi MySQL: Client does not support authentication protocol requested by server; consider upgrading MySQL client

To, co je tučně je chyba, kterou jsem již vypsal skriptem. Kde se tam vzalo to před tím, netuším. Máte někdo zkušenost s používáním MySQL na lokálním počítači s obdobnou konfigurací? Mohl byste mi někdo poradit, kde dělám chybu?

UPDATE:

Po nastavení parametru default-character-set na hodnotu latin1 už mi to nepíše tu chybovou hlášku o nekompilovaném charsetu, ale stále zůstává problém s tím přístupem.

Nefunkční Google? - funkční

Omlouvám se za včerejší poplašnou zprávu. V žádném případě nodošlo k výpadku vyhledávače Google, ale s největší pravděpodobností nebyl včera funkční některý z DNS serverů (pravděpodobně ten náš).

Bohužel to bylo ve chvíli, kdy jsem z testovacích důvodů nutně potřeboval najít něco právě na Googlu (je to můj nejoblíbenější vyhledávač). Hlavní je to, že dnes už to zase funguje. Jenže dnes už hledat nepotřebuju (alespoň zatím ne).

Nefunkční Google?

Je chyba jen u mě nebo dnes večer nefungují stránky Googlu?

Nevím, možná je nějaká chyba v nastavení našeho firemního serveru (doma připojení k internetu nemám), ale když zkusím do prohlížeče zadat http://www.google.com, tak mi to vyhodí chybu Server nelze najít.

Funguje vám dnes Google?


Přeskočit na obsah