Vydělávej až 160.000 Kč měsíčně! Akreditované rekvalifikační kurzy s garancí práce od 0 Kč. Více informací.
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.
Avatar
Tomáš "chlastyml" Kacálek:3.9.2019 15:04

Ahoj, kdyz jsem zkousel, zde na sit, studovat RegExp, tak v prvnim lekci jsem se trochu ztratil v tom, jak inicializovat instanci RegExp.

https://www.itnetwork.cz/…vyrazy-regex

Mam kod:

const input = "[email protected]";

const regexpString = new RegExp('^[a-zA-Z0-9._-]+@[a-zA-Z0-9._-]+\.[a-zA-z]{2,4}$');
const regexp = /^[a-zA-Z0-9._-]+@[a-zA-Z0-9._-]+\.[a-zA-z]{2,4}$/;

console.log('regexpString', regexpString.test(input)); // output: regexpString true
console.log('regexp', regexp.test(input)); // output: regexp false

vstupni retezec by nemel projit, ale kdyz vytvorim RegExp pomoci retezce, tak projde.
Nema nekdo poneti proc?

Dekuji :)

PS: zkousim to pres node.js v11.10.0

Zkusil jsem: Pokud zkusim jine vstupni data, tak:

inicializace pomoci retezce:

const regexpString = new RegExp('^[a-zA-Z0-9._-]+@[a-zA-Z0-9._-]+\.[a-zA-z]{2,4}$');

inicializace bez pomoci retezce:

const regexp = new RegExp(/^[a-zA-Z0-9._-]+@[a-zA-Z0-9._-]+\.[a-zA-z]{2,4}$/);
input inicializace pomoci retezce inicializace bez pomoci retezce popis
  false false prazdny retezec
@email.com false false chybi prefix
[email protected] true false chybi server
muj@email. false false chybi postfix
[email protected] false false postfix je kratky
muj@email.comma true false postfix je dlouhy

Vsude by melo byt false. Posledni sloupec rika proc :)

Chci docílit: Jde mi o pochopeni co se deje :)

 
Odpovědět
3.9.2019 15:04
Avatar
Peter Mlich
Člen
Avatar
Peter Mlich:4.9.2019 8:39
var reg, patt, str; // reg = regularni vyraz, regular expression, patt = pattern, vzorec jako v matematice, predpis, str = string

reg = new RegExp('mujregvyraz', 'g'); // g m i x nebo nic - modifikatory, new RegExp('mujregvyraz')
reg = /mujregvyraz/g; // totez
patt = 'mujregvyraz';
reg = new RegExp(patt, 'g');

str = 'table football';
console.log(reg.test(str));

google = regexp test
google = regexp example

Ta tabulka je super, ale k te tabulce jsi nedodal source-code, takze ti nemuzu rici, co mas spatne. Nekdy je nutne regexp znova inicializovat, pri opakovanem pouziti.

http://www.regexp.cz/

  1. ^[a-zA-Z0-9._-]+@[a-zA-Z0-9._-]+\.[a-zA-z]{2,4}$
  2. @email.com
  3. nic
  4. javascript --> neshoduje se

Samozrejme, vzorec rika, ze pre @ musi byt spon 1 znak ze zavorky, znacka +
"+ jedno nebo více opakování, např. a+"

Inicializace pomoci retezce podleha retezcovemu escapovani znaku pomoci zpetneho lomitka\ . Musis pridat vic lomitek.
^[a-zA-Z0-9._-]+@[a-zA-Z0-9._-]+\.[a-zA-z]{2,4}$ -->
^[a-zA-Z0-9._-]+@[a-zA-Z0-9._-]+.[a-zA-z]{2,4}$ // tecka je jakykoliv znak
a nebo tam dej zavorku
'^[a-zA-Z0-9._-]+@[a-zA-Z0-9._-]+\\.[a-zA-z]{2,4}$' , \\ --> \
'^[a-zA-Z0-9._-]+@[a-zA-Z0-9._-]+[.][a-zA-z]{2,4}$'

Akceptované řešení
+20 Zkušeností
+2,50 Kč
Řešení problému
 
Nahoru Odpovědět
4.9.2019 8:39
Avatar
Peter Mlich
Člen
Avatar
Peter Mlich:4.9.2019 8:42

a mimochodem, slo by to napsat takto, pokud se ti ten tvar hodi vic
/^[a-zA-Z0-9._-]+@[a-zA-Z0-9._-]+\.[a-zA-z]{2,4}$/
/^[a-z0-9._-]+@[a-z0-9._-]+\.[a-z]{2,4}$/i
/^[\w\d._-]+@[\w\d0-9._-]+\.\w{2,4}$/i

 
Nahoru Odpovědět
4.9.2019 8:42
Avatar
Peter Mlich
Člen
Avatar
Peter Mlich:4.9.2019 8:47

https://developer.mozilla.org/…jects/RegExp

var regex1 = /\w+/;
var regex2 = new RegExp('\\w+');

console.log(regex1);
// expected output: /\w+/

console.log(regex2);
// expected output: /\w+/

console.log(regex1 === regex2);
// expected output: false
---
var re = /\w+/;
var re = new RegExp('\\w+');
  • mas tu to lomitkovani
  • a mas tu take zobrazeni regularniho vyrazu, aby ses mohl podivat, ze vyraz je spravny console.log(re­gex1);
  • a taky jsou tam vypsane modifikatory/flag g m i s u y
 
Nahoru Odpovědět
4.9.2019 8:47
Avatar
Peter Mlich
Člen
Avatar
Peter Mlich:4.9.2019 9:47

Jeste mozna zajimavost...

<?php
echo "\\"; // vypise \
echo "<script>patt = \"\\\\\";</script>"; // vypise <script>patt = "\\";</script>

Kvuli vypsani lomitka pro regularni vyraz, kdyz chces spesl dodrzet jakesi formatovani, tak potrebujes 5 lomitek :) A urcite by se dala vymyslet jeste silenejsi kombinace treba <input onclick="patt = &guote;\\&guote;" a vypsat to jako php string :)

 
Nahoru Odpovědět
4.9.2019 9:47
Avatar
Odpovídá na Peter Mlich
Tomáš "chlastyml" Kacálek:4.9.2019 12:50

source code k tabulce:

const createInputObj = (text, description) => ({ text, description });
const inputs = [
    createInputObj('', 'prazdny retezec'),
    createInputObj('@email.com', 'chybi prefix'),
    createInputObj('[email protected]', 'chybi server'),
    createInputObj('muj@email.', 'chybi postfix'),
    createInputObj('[email protected]', 'postfix je kratky'),
    createInputObj('[email protected]', 'postfix je dlouhy'),
];

const regexpString = new RegExp('^[a-zA-Z0-9._-]+@[a-zA-Z0-9._-]+\.[a-zA-z]{2,4}$');
const regexp = new RegExp(/^[a-zA-Z0-9._-]+@[a-zA-Z0-9._-]+\.[a-zA-z]{2,4}$/);

console.log(`| input | inicializace pomoci retezce | inicializace bez pomoci retezce | popis |`);
const generateRow = (input) => console.log(`| ${input.text} | ${regexpString.test(input.text)} | ${regexp.test(input.input)} | ${input.description} |`);
for (const input of inputs) {
    generateRow(input);
}

pak uz jen kopirovani z konzole.

PS: Jinak ten regularni vyraz je z lekce o regularnich vyrazech viz. link nahore v prvnim postu.

 
Nahoru Odpovědět
4.9.2019 12:50
Avatar
Odpovídá na Peter Mlich
Tomáš "chlastyml" Kacálek:4.9.2019 12:55

Jo uz to vidim v te inicializi pomoci stringu je potreba odescapovat (vubec netusim, zda takove slovo existuje :D) jedno zpetne lomitko.

'^[a-zA-Z0-9._-]+@[a-zA-Z0-9._-]+\.[a-zA-z]{2,4}$'

↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓

'^[a-zA-Z0-9._-]+@[a-zA-Z0-9._-]+\\.[a-zA-z]{2,4}$'

Diky :)

 
Nahoru Odpovědět
4.9.2019 12:55
Avatar
Peter Mlich
Člen
Avatar
Peter Mlich:4.9.2019 12:58

Napis jim to tam k clanku do komentare. To je dost zavazna chybka.
Dokonce mozna pridat ten tvuj kod i s vysledkem a pridat tam zobrazeni i reg. vyrazu. At je tam krasne videt, ze to omitko tam ma smysl, ze se uplne zmeni reg. vyraz :)

 
Nahoru Odpovědět
4.9.2019 12:58
Avatar
Odpovídá na Peter Mlich
Tomáš "chlastyml" Kacálek:4.9.2019 13:01

No to nebude nutne, nebot oni nevytvareji regularni vyraz ze stringu, ale pres ten kod:

var re = /^[a-zA-Z0-9._-]+@[a-zA-Z0-9._-]+\.[a-zA-z]{2,4}$/;
var platny = re.test("[email protected]");
document.write(platny)

To jen ja jsem to vytvoril pres ten string a pak jsem byl zmaten :D

 
Nahoru Odpovědět
4.9.2019 13:01
Avatar
Peter Mlich
Člen
Avatar
Peter Mlich:5.9.2019 7:50

No, minimalne to tady navozuje ten dojem. A mozna by bylo dobre to tam uvest. Pripadne odkazat na nejake verohodnejsi zdroj. Treba by stacilo neco jednoduche, jak jsem vykopiroval ze stranek firefoxu mozily. A zminit tam, ze je to escapovani kvuli stringu '...' nebo "...".
escape (esc) = uniknout, uprchnout, zachranit. Je to ve smyslu zachranit znaky, ktere bys tam nemohl zobrazit. Vybral se pro to znak \ a je to psano nekde v dokumentaci k js, kde je pokec o stringu. Je to hlavne kvuli tomu, abys tam mohl dat apostrof. Js-regexp pouziva stejny system. Proto, kdyz tam chces dat nektery ze zakazanych znaku a navic pomoci stringu, musi tam byt tolik lomitek.

'...\'...' = apostrof do stringu, protoze apostrof ohranicuje string, zacatek, konec
"...\"..."
"...\\..." = lomitko, protoze slouzi k escapovani

U regexpu se jedna o znaky [ \ ^ $ . | ? * + ( )
Za urcitych okolnosti se escapovat nemusi, treba v hranate zavorce.
\. nebo [.]

[a-zA-Z0-9._-]+@[a-zA-Z0-9._-]+\.[a-zA-z]{2,4} // priklad z odkazu
...
var regexp = new RegExp(vzor, modifikátory);
//Nebo
var regexp = /vzor/modifikátory

----

var re = /\w+/; // z firefoxu
var re = new RegExp('\\w+');
 
Nahoru Odpovědět
5.9.2019 7:50
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 10 zpráv z 10.