C# Vill kontrollera om string inehåller annat än bokstäver

Permalänk
Medlem

C# Vill kontrollera om string inehåller annat än bokstäver

Jag skriver ett program där jag ber användaren ange för och efternamn. Jag vill inte att användaren ska kunna använda andra symboler än bokstäver. Finns det något smidigt sätt att kolla detta?

Programmet är en Console Application.

Tacksam för svar

Permalänk
Medlem

Jag är inte speciellt bekant med språket C#. Men detta kanske kan vara till hjälp, http://www.elook.org/programming/c/isalpha.html

Visa signatur

Stationär: 7800X3D | 32GB DDR5 | Strix B650 | 3080 XTREME WF | Evolv X | 970 2+1TB | G915 | G604/G Pro W | LG 42C2
Homelab: I3 6100 | 64GB DDR4 | Node 304 | 6x 4TB HGST| 990 PRO 2 TB
Bärbart: Macbook 14 pro M2 | Tab S5e | iPhone 14 pro

Permalänk
Medlem
Skrivet av Claews:

Jag är inte speciellt bekant med språket C#. Men detta kanske kan vara till hjälp, http://www.elook.org/programming/c/isalpha.html

Det där är C, inte C#.

http://msdn.microsoft.com/en-us/library/yyxz6h5w.aspx?cs-save...

Permalänk
Medlem

Jag tycker det låter som en ypperlig anledning att lära sig RegEx om man inte redan kan det! (y)
Sjukt användbar kunskap!

Visa signatur

"Memory is like an orgasm. It's a lot better if you don't have to fake it." - Seymore Cray

Permalänk
Medlem

RegEx är sjukt användbart.
Ang att bara tillåta bokstäver - missa inte t.ex. att en del heter "Lars-Olof" och andra kanske heter André...
Dvs, ta höjd för mer än bara a-ö och A-Ö.

http://msdn.microsoft.com/en-us/library/system.text.regularex...

Visa signatur

Mvh
David

Permalänk
Medlem

Tack för bra tips! Kommer sätta mig i kväll och plugga RegEx. Jag har fler uppgifter framöver där RegEx verkar komma väl till pass!

Skickades från m.sweclockers.com

Permalänk
Medlem
Skrivet av robbannn:

Jag skriver ett program där jag ber användaren ange för och efternamn. Jag vill inte att användaren ska kunna använda andra symboler än bokstäver. Finns det något smidigt sätt att kolla detta?

Programmet är en Console Application.

Tacksam för svar

Bestäm vad ett namntecken ska kunna innehålla och gör så här

bool IsNameChar(char ch) { return Char.IsLetter(ch) || Char.IsWhiteSpace(ch); } ... namn.All(IsNameChar); == true om IsNameChar stämmer för alla tecken i namn, annars false

Visa signatur

Kom-pa-TI-bilitet

Permalänk
Medlem

Japp använd regex.IsMatch

Permalänk
Medlem

Det är super lätt med Regex

String text = "ABC"; if (Regex.IsMatch(text, @^[a-zA-Z]+$)) { Console.WrieLine("Texten innehåller enbart bokstæver!"); } text = "ABC123"; if (!Regex.IsMatch(text, @^[a-zA-Z]+$)) { Console.WrieLine("Texten innehåller nummer!"); }

Du kan använd göra det lite smidigare med en funktion

public bool ContainsLettersOnly(string text) { return Regex.IsMatch(text, @^[a-zA-Z]+$); } Console.WriteLine(ContainsLettersOnly("HEJ"); // True Console.WriteLine(ContainsLettersOnly("HEJ123"); // False

Permalänk
Medlem
Skrivet av Snowy86:

Det är super lätt med Regex

String text = "ABC"; if (Regex.IsMatch(text, @^[a-zA-Z]+$)) { Console.WrieLine("Texten innehåller enbart bokstæver!"); } text = "ABC123"; if (!Regex.IsMatch(text, @^[a-zA-Z]+$)) { Console.WrieLine("Texten innehåller nummer!"); }

Du kan använd göra det lite smidigare med en funktion

public bool ContainsLettersOnly(string text) { return Regex.IsMatch(text, @^[a-zA-Z]+$); } Console.WriteLine(ContainsLettersOnly("HEJ"); // True Console.WriteLine(ContainsLettersOnly("HEJ123"); // False

Console.WriteLine(ContainsLettersOnly("Åke")); // False

Visa signatur

Kom-pa-TI-bilitet

Permalänk
Medlem
Skrivet av Teknocide:

Console.WriteLine(ContainsLettersOnly("Åke")); // False

Ja a-Z löser inte många problem, används för ofta av de som inte förstår sig på regex, största anledningen varför man absolut inte ska använda sig av det så länge man inte MÅSTE. Din linq sats löser problemet gallat och lätt att utvecklare i så fall det behövs.

För er som dock MÅSTE ha Regex syntaxen så har ni den här ^[\p{L}\s-]+$ och jag tänker då inte förklara den. Förstår du den inte, använd den absolut aldrig då det enbart kommer göra din kod förbannat mycket svårare att hantera.

Visa signatur

Speldator: Ryzen 7800X3D, 64GB DDR5, RTX 3070
Server: i7-8700k, 32GB DDR4, RTX2080
Steam deck + de fiesta konsoller.

Permalänk
Medlem
Skrivet av MugiMugi:

Ja a-Z löser inte många problem, används för ofta av de som inte förstår sig på regex, största anledningen varför man absolut inte ska använda sig av det så länge man inte MÅSTE. Din linq sats löser problemet gallat och lätt att utvecklare i så fall det behövs.

För er som dock MÅSTE ha Regex syntaxen så har ni den här ^[\p{L}\s-]+$ och jag tänker då inte förklara den. Förstår du den inte, använd den absolut aldrig då det enbart kommer göra din kod förbannat mycket svårare att hantera.

Visst, sant. Jag anvander det enbart for att kolla anvandarnamn och da fungerar det bra aftersom AAO oftast inte anvands. Vill man ha nagot som ar lattare att forsta an din losning fungerar ju t.ex. ocksa ^(?i)[a-zåäö]+$ (eller ^[a-zåäöA-ZÅÄÖ]+$). Man aven da fungerar ju t.ex. inte med Danska, men det hela beror helt pa situationen.

Permalänk
Medlem

Mitt råd är att skita i regexp. Koden blir bara svår att läsa. Använd LINQ istället.

http://stackoverflow.com/a/1181488

Permalänk
Medlem
Skrivet av Flexbert:

Mitt råd är att skita i regexp. Koden blir bara svår att läsa. Använd LINQ istället.

http://stackoverflow.com/a/1181488

Helt klart basta losningen.

Permalänk
Medlem
Skrivet av Snowy86:

Helt klart basta losningen.

Tack

Visa signatur

Kom-pa-TI-bilitet

Permalänk
Medlem
Skrivet av Snowy86:

Visst, sant. Jag anvander det enbart for att kolla anvandarnamn och da fungerar det bra aftersom AAO oftast inte anvands. Vill man ha nagot som ar lattare att forsta an din losning fungerar ju t.ex. ocksa ^(?i)[a-zåäö]+$ (eller ^[a-zåäöA-ZÅÄÖ]+$). Man aven da fungerar ju t.ex. inte med Danska, men det hela beror helt pa situationen.

Nej den funkar inte heller. Tänk på att det finns fler bokstäver i namn än a-ZåäöÅÄÖ T.ex. space i dubbel namn, bindestreck sedan finns det. Finns säkert fler jag inte enns tänker på här.

Visa signatur

Speldator: Ryzen 7800X3D, 64GB DDR5, RTX 3070
Server: i7-8700k, 32GB DDR4, RTX2080
Steam deck + de fiesta konsoller.