Avatar billede refi Nybegynder
21. november 2011 - 12:25 Der er 25 kommentarer og
1 løsning

RegExp

Hej,

Ønsker at checke om en felt værdi er tom, eller om der er bogstaver indtastet. Det skal gøres med RegExp og ikke JavaScript og/eller andet.

Dvs. der skal "bremses" hvis den er tom eller der kun er angivet spaces, tab's osv... derudover må tal ikke forkomme.

Tænkte om der kunne bygges videre på denne her: ^[a-åA-Å'.\s]

Nogen der er skrap udi den slags?
Avatar billede Syska Mester
21. november 2011 - 12:54 #1
var regex = new Regex(@"^[^0-9 ]{1,}$", RegexOptions.IgnoreCase);

            regex.IsMatch(" ").Should().BeFalse();
            regex.IsMatch("å").Should().BeTrue();
            regex.IsMatch("78").Should().BeFalse();
            regex.IsMatch("æøå").Should().BeTrue();
            regex.IsMatch("").Should().BeFalse();
            regex.IsMatch("hej med dig").Should().BeFalse();

Match alt der ikke er tal og mellemrum.

Er det sådan noget du vil have?
Avatar billede niklask Nybegynder
21. november 2011 - 12:57 #2
^[a-zA-Z]+$ tillader kun bogstaver, ingen mellemrum eller tal.
Avatar billede niklask Nybegynder
21. november 2011 - 12:58 #3
^[a-åA-Å]+$
Avatar billede Syska Mester
21. november 2011 - 13:03 #4
#niklask
Hva så med, ,.-+´ ?

Han siger det kun er spaces, tabs og tal han ikke vil match på.

mvh
Avatar billede refi Nybegynder
21. november 2011 - 13:11 #5
Der må gerne være mellemrum efter eks. en række bogstaver... der skal bare være bogstaver og ikke KUN mellemrum.

Dvs. den skal melde fejl, hvis ingenting er indtastet, hvis KUN et SPACE, TAB osv. er indtastet... Altså... bogstaver og mellemrum (kun hvis der er bogstaver indtastet forvejen).
Avatar billede refi Nybegynder
21. november 2011 - 13:13 #6
@niklask er klar over hvordan ^[a-åA-Å'.\s] fungere, tænkte bare at den kunne udbygges til også at håndtere de andre kriterier.

Har lavet en statisk klasse til at styre mine valideringer... det er der sætningen skal benyttes.
Avatar billede refi Nybegynder
21. november 2011 - 13:16 #7
<asp:RegularExpressionValidator ID="RegularExpressionValidator1" runat="server" ErrorMessage="Fornavn skal indtastes skal indtastes..."
    ControlToValidate="txtFirstname" ValidationExpression="<%=scripts.RegExp.NotEmpty%>"></asp:RegularExpressionValidator>
Avatar billede Syska Mester
21. november 2011 - 13:17 #8
Kan du så ikke lige prøve at skrive end hvad den skal match og ikke match.

Lidt svært at vide det ud fra dine lidt flyvske sætninger.

Kom med 10 sætninger der skal fejle og 10 den skal matche, så er det meget nemmere for at at finde et regex som passer dit til behov.

mvh
Avatar billede refi Nybegynder
21. november 2011 - 13:19 #9
@buzzzz, fair enough!

"" skal fejle

" " skal fejle

"Mark Christopher" skal IKKE fejle
Avatar billede Syska Mester
21. november 2011 - 13:59 #10
var regex = new Regex(@"^[a-zæøå]+([ ]?[a-zæøå]+)?$", RegexOptions.IgnoreCase);

regex.IsMatch(" ").Should().BeFalse();
regex.IsMatch("å").Should().BeTrue();
regex.IsMatch("78").Should().BeFalse();
// regex.IsMatch("æøå").Should().BeTrue();
regex.IsMatch("").Should().BeFalse();
regex.IsMatch("hej med dig").Should().BeFalse();
regex.IsMatch("Chuck Norris").Should().BeTrue();

regex.IsMatch(" Chuck Norris").Should().BeFalse();

regex.IsMatch("Chuck Norris ").Should().BeFalse();

regex.IsMatch("--").Should().BeFalse();

regex.IsMatch("    ").Should().BeFalse();
Avatar billede johny Nybegynder
21. november 2011 - 17:25 #11
@buzzzz: Dit forslag indeholder vel logik for en bestemt syntax? Derudover tillader den kun almindeligt brugte danske tegn.

Jeg ville umiddelbart gå med følgende:
^.*\p{L}.*$

Det tillader en streng så snart der har været bare ét bogstav.

@refi og niklask: at bruge karakter rækkefølge a-å virker ikke. Det er kun for a-z det kan bruges. Hvilket også er grunden til at buzzzz har rettet det til a-zæøå. \p{L} inkluderer dog alle varianter, både lower og upper case, så det var den jeg umiddelbart ville vælge.
Avatar billede Syska Mester
21. november 2011 - 17:42 #12
hmmm, kender ikke \p og andre men:

Disse fejler:
regex.IsMatch(" Chuck Norris").Should().BeFalse();
regex.IsMatch("Chuck Norris ").Should().BeFalse();
regex.IsMatch("hej med dig").Should().BeFalse();

Hvilket de efter hvad "refi" skrev ikke måtte være valid.
Avatar billede Syska Mester
21. november 2011 - 18:01 #13
Jamen, der kan man bare se ... så lærte jeg om \p{L} i dag. Har længe søgt efter det, men åbenbart ikke rigtigt fattet den før nu.

Følgende test virker. En modifikation af johny's regex:

var regex = new Regex(@"^\p{L}+(.\p{L}+)*$", RegexOptions.IgnoreCase);

regex.IsMatch("Søren").Should().BeTrue();
regex.IsMatch(" ").Should().BeFalse();
regex.IsMatch("å").Should().BeTrue();
regex.IsMatch("78").Should().BeFalse();
regex.IsMatch("æøå").Should().BeTrue();
regex.IsMatch("").Should().BeFalse();
regex.IsMatch("hej med dig").Should().BeTrue();
regex.IsMatch("Chuck Norris").Should().BeTrue();

regex.IsMatch(" Chuck Norris").Should().BeFalse();
regex.IsMatch("Chuck Norris ").Should().BeFalse();

regex.IsMatch("--").Should().BeFalse();

regex.IsMatch("    ").Should().BeFalse();
Avatar billede johny Nybegynder
21. november 2011 - 18:02 #14
Ikke som jeg læser den? Hvad jeg kan se, er der egentlig blot tale om at whitespace/tal alene ikke er nok. Overså dog lige det med tab ikke må være der, så min skal være modificeres til:
^[^\t]*[a-å][^\t]*$
Avatar billede johny Nybegynder
21. november 2011 - 18:03 #15
Ah øv, copy paste fejl. Det skulle selvfølgelig have været:
^[^\t]*\p{L}[^\t]*$
Avatar billede johny Nybegynder
21. november 2011 - 18:03 #16
Expresso kan forresten stærkt anbefales som RegEx værktøj. Der er alle disse karakter klasser inkluderet. :)
Avatar billede Syska Mester
21. november 2011 - 18:05 #17
Der er en grund til at jeg ville have 10 sætninger af ting som skulle fejle og 10 som skulle være valid :-)

Lige nu gætter vi os bare lidt frem.
Avatar billede Syska Mester
21. november 2011 - 18:06 #18
Fandt dem her: http://msdn.microsoft.com/en-us/library/20bw873z.aspx#SupportedUnicodeGeneralCategories :-)

Det minder mig om at jeg så måske kan optimere et par andre af mine regex.
Avatar billede Syska Mester
21. november 2011 - 18:10 #19
Tilfældigt kommer dette tweet ind: http://twitter.com/#!/mfloryan/status/138660330090926080

OMG.
Avatar billede johny Nybegynder
21. november 2011 - 18:11 #20
Hvis man følger din fremgangsmåde burde følgende for i øvrigt være nok (har fjernet punktum og casing option):
var regex = new Regex(@"^\p{L}+(\p{L}+)*$");
Avatar billede Syska Mester
21. november 2011 - 23:23 #21
Hvordan matcher den så mellemrum eller mig der ikke lige forstår den regex ?
Avatar billede refi Nybegynder
22. november 2011 - 08:19 #22
Tak til @buzzzz og @johny for de gode kommentarer... smider i begge et svar da jeg hentede inspiration fra jer begge til løsningen.

Super med lidt kvalificeret hjælp!
Avatar billede refi Nybegynder
22. november 2011 - 08:25 #23
@johny, købte værktøjet RegexBuddy i går, kan stærkt anbefales... det du nævner faldt jeg ikke over da jeg Googlede. RegexBuddy er også godt til at tune expressions med... absolut også anbefalelsesværdigt.
Avatar billede Syska Mester
22. november 2011 - 13:44 #24
svar.

Mener at der også findes et 3 som er gratis ... ligner meget det johny også skrev om. Det er bare et års tid siden jeg brugte det, så kan ske at jeg husker forkert også det er det som Johny nævnte.
Avatar billede johny Nybegynder
24. november 2011 - 22:28 #25
@buzzzz: Du har ret, jeg troede bare punktummet var en fejl. Jeg ville dog nok stadig nøjes med at bruge et mellemrum i så fald, så det kun er det der tillades. Ang. linket, så er det ret cool. :) Men ja, cool er så også det eneste det er, da man ikke skal særlig højt op i tal rækkefølgen for at det bliver umådelig langsomt. :)

@refi: Det kan Expresso skam også. :) Men godt du fandt en tool der passer til dig. Glad to help!

Angående at lægge et svar, så troede jeg faktisk at jeg havde gjort det, men submit var åbenbart ikke eksekveret. Men samler heller ikke på det.
Avatar billede Syska Mester
24. november 2011 - 23:07 #26
Hahah, ja, mellemrum i stedet for "." ... faktisk en dum fejl.

Men jeg forstår ikke altid det regex mod navne og ting. Keep it simple ... worst case mister man en kunde. Folk der vil snyde skal nok komme ind.

Glæader består for mig i at hjælpe.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester