Problém s regulárním výrazem   zodpovězená otázka

VB.NET, Regulární výrazy

Bezúspěšně jsem ztratil spoustu času pokusy vytvořit regulární výraz, který by u IsMatch vracel True, pokud řetězec obsahuje požadované znaky kdekoliv a False pokud by kdekoliv obsahoval jiné znaky. Řetězec může obsahovat pouze: a-z, A-Z, 0-9, . a -. Nejvíce se požadovanému výsledku blížilo [a-zA-Z0-9\.-], jenže to vrací True například když je v textu otazník. Jestli se najde někdo s větší trpělivostí se sračkou jménem Regular Expressions, budu ušetřen For, IndexOf a Contains.

nahlásit spamnahlásit spam 1 / 1 odpovědětodpovědět

Stačí ty regexpy trochu umět.

Musíte na začátek přidat ^ a na konec $, jinak hledá kdekoliv v tom textu. Stačí tedy, aby v textu byl libovolný jeden znak vyhovující tomu výběru, a projde to.

Jo a ještě za tu hranatou závorku přidat +, jako že to není jen jeden znak, ale že to má být sekvence více znaků za sebou.

^[a-zA-Z-.]+$

Escapovat tečku v [] není nutné (tam to zmanemá vždy tečku).

A pomlčku také ne, pokud je na místě, kde to nemůže být bráno jako od-do.

nahlásit spamnahlásit spam 2 / 2 odpovědětodpovědět

Díky za projevenou snahu, ale zase taková nula přes regulární výrazy nejsem. Nevím, zda jsem se špatně vyjádřil, ale

Regex.IsMatch("-UT2040-", "^[a-zA-Z-.]+$")

vrací False, přičemž by mělo projít. Projít by mělo např.:

-UT2040-

UT2.0.4

T-2.

(skládá se jen z povolených znaků)

Ale ne např.:

UT_2040

-UT2*-

(skládá se nejen z povolených znaků)

nahlásit spamnahlásit spam 1 / 1 odpovědětodpovědět

Teď jste jen slepě vykopíroval a vyzkoušel, co napsal Tomáš. On totiž zapomněl na výčet číslic, který v prvním příspěvku máte.

Pokud ho tam doplníte, funguje to zcela v pořádku a dle očekávání:

^[a-zA-Z0-9-.]+$

Problémem tedy předpokládám bylo zapomenutí znaků ^ a $.

nahlásit spamnahlásit spam 2 / 2 odpovědětodpovědět

Ajo, na číslíčka jsem zapomněl.

nahlásit spamnahlásit spam 1 / 1 odpovědětodpovědět

Pravda, nevšimnul jsem si chybějícího číselného rozsahu. Teď už to funguje přesně podle očekávání.

nahlásit spamnahlásit spam 0 odpovědětodpovědět
                       
Nadpis:
Antispam: Komu se občas házejí perly?
Příspěvek bude publikován pod identitou   anonym.
  • Administrátoři si vyhrazují právo komentáře upravovat či mazat bez udání důvodu.
    Mazány budou zejména komentáře obsahující vulgarity nebo porušující pravidla publikování.
  • Pokud nejste zaregistrováni, Vaše IP adresa bude zveřejněna. Pokud s tímto nesouhlasíte, příspěvek neodesílejte.

přihlásit pomocí externího účtu

přihlásit pomocí jména a hesla

Uživatel:
Heslo:

zapomenuté heslo

 

založit nový uživatelský účet

zaregistrujte se

 
zavřít

Nahlásit spam

Opravdu chcete tento příspěvek nahlásit pro porušování pravidel fóra?

Nahlásit Zrušit

Chyba

zavřít

feedback