---
title: "Lösenordskontroll"
type: "forum-thread"
url: "https://www.webforum.nu/amne/dotnet/179487-lösenordskontroll"
topic: ".NET"
topic_url: "https://www.webforum.nu/amne/dotnet"
author: "MickeA.com"
published: "2009-07-22T12:34:00.000Z"
updated: "2009-08-15T15:23:30.000Z"
replies: 21
views: 1746
page: 1
pages: 2
language: "sv-SE"
site: "webForum — webforum.nu"
rights: "Upphovsrätten till varje inlägg tillhör dess författare."
attribution: "Citera som: webForum, https://www.webforum.nu/amne/dotnet/179487-lösenordskontroll"
---

# Lösenordskontroll

_Sida 1 av 2._

## #1 — MickeA.com, 2009-07-22T12:34Z

Tjena,

Jag måste bygga om vår kontroll av lösenord och det måste från och med nu följa detta mönster: 

```
The password length is 4-14 characters and we only allow numbers and letters, no special characters, symbols, spaces or punctuation marks
```

Jag är så fruktansvärt kass på regexp, så skulle bli glad för lite hjälp med det här.

Tack!

Permalänk: https://www.webforum.nu/p/179487

## #2 — Peter S, 2009-07-22T12:39Z

```
if (!Regex.IsMatch(inputString, @"^[a-z0-9]{4,14}$", RegexOptions.IgnoreCase))
{
  // no match
}
```

Permalänk: https://www.webforum.nu/p/2193681

## #3 — MickeA.com, 2009-07-22T13:04Z

Tack!

Permalänk: https://www.webforum.nu/p/2193683

## #4 — MickeA.com, 2009-07-22T13:18Z

Om jag vill pimpa det ovan och kräva t.ex. att lösenordet måste börja på en siffra och sluta på en stor bokstav, eller låt säg att det minst måste innehålla två siffror och tre stora bokstäver, hur ska det se ut då?

Permalänk: https://www.webforum.nu/p/2193685

## #5 — Peter S, 2009-07-22T13:35Z

Om lösenordet innehåller färre än 2 siffror eller färre än 3 versaler:

```
if (inputString.Length < 4 || inputString.Length > 14
    || Regex.Matches(inputString, @"\d").Count < 2 || Regex.Matches(inputString, @"[A-Z]").Count < 3)
{
  // error
}
```

Permalänk: https://www.webforum.nu/p/2193686

## #6 — MickeA.com, 2009-07-22T13:49Z

Bör något sånt här funka?

```
String login = uif.GetString("login");
String passwd = uif.GetString("password");
if(!String.IsNullOrEmpty(login) || !String.IsNullOrEmpty(passwd)){
	Regex validateLogin  = new Regex(@"\A(?![a-zA-Z0-9_.\-]*? {2,})[a-zA-Z0-9_.\-]{2,12}\z");
	Regex validatePasswd = new Regex(@"^[a-z0-9]{4,14}$");
	if(!validateLogin.IsMatch(login)){
		errorLbl.Text = Res.GetString("login_mismatch").Replace("%LOGIN%", login);
		errorPanel.Visible = true;
		return;

	}else if(validatePasswd.IsMatch(passwd)){
		errorLbl.Text = "Password doesn't match the pattern.";
		errorPanel.Visible = true;
		return;

	}else if(Regex.Matches(passwd, @"\d").Count < 2 || Regex.Matches(passwd, @"[A-Z]").Count < 3){
		errorLbl.Text = "The password must contain at least 2 digits and 3 CAPITAL letters.";
		errorPanel.Visible = true;
		return;
	}
}
```

Permalänk: https://www.webforum.nu/p/2193687

## #7 — Peter S, 2009-07-22T14:27Z

Om du ändrar till:

```
Regex validatePasswd = new Regex(@"^[a-z0-9]{4,14}$", RegexOptions.IgnoreCase);
```

Permalänk: https://www.webforum.nu/p/2193690

## #8 — MickeA.com, 2009-07-22T14:53Z

Vad innebär IgnoreCase i det här fallet? För våra lösenord är shiftlägeskänsliga. Kommer det att påverka valideringen på något sätt?

Permalänk: https://www.webforum.nu/p/2193698

## #9 — Peter S, 2009-07-22T15:10Z

Det innebär att den andra if-satsen kommer att tillåta lösenord som innehåller gemener, versaler och siffror istället för bara gemener och siffror.

Om IgnoreCase inte tas med kommer alla lösenord som innehåller versaler att rapporteras som ogiltiga. Alternativet till att ta med IgnoreCase är att använda \[a-zA-Z0-9\].

Permalänk: https://www.webforum.nu/p/2193700

## #10 — MickeA.com, 2009-07-22T15:21Z

Okej, tack!

Permalänk: https://www.webforum.nu/p/2193703

## #11 — Brimba, 2009-07-25T16:59Z

> **[Peter S skrev:](https://www.webforum.nu/p/1474550)**
>
> Om IgnoreCase inte tas med kommer alla lösenord som innehåller versaler att rapporteras som ogiltiga. Alternativet till att ta med IgnoreCase är att använda \[a-zA-Z0-9\].

Det innebär väl också att det inte spelar någon roll om man skickar in en versal eller gemen, vilket gör lösenordskontrollen sämre?

> Om jag vill pimpa det ovan och kräva t.ex. att lösenordet måste börja på en siffra och sluta på en stor bokstav, eller låt säg att det minst måste innehålla två siffror och tre stora bokstäver, hur ska det se ut då?

Angående lösenord så kan man använda "titta framför" i regex för att uppnå det du vill. Jag har skrivit lite om det här <http://patrikc.wordpress.com/2009/06/01/avancerade-reguljara-uttryck/>

I ditt exempel skulle man kunna skriva såhär:

```
^((?=(.*\d){2})(?=.*[a-z])(?=(.*[A-Z]){3}).{4,14})$
```

(?=(.\*\\d){2}) - talar om att det måste finnas minst två siffror.
(?=.\*\[a-z\]) - talar om att det måste finnas minst en liten bokstav
(?=(.\*\[A-Z\]){3}) - talar om att det måste finnas minst tre stora bokstäver
.{4,14} - talar om att vilka tecken som helst får förekomma mellan 4 och 14 gånger. Detta kan du ändra till \[a-zA-Z0-9\] om du vill begränsa lösenordet till endast dessa tecken.

Jag avråder dig från att skapa en lösenordskontroll som bygger på att man måste börja sitt lösenord med en siffra och avsluta med en versal. Detta eftersom man då hjälper en hacker i sitt arbete att knäcka lösenord. Det bästa är att låta användaren välja från ett stort urval och precis som du söker, tvinga han att kombinera sitt lösenord så det består av många olika tecken.

Men som exempel kan det se ut såhär

```
^[0-9].{2,12}[A-Z]$
```

Alternativt återigen, byta ut . mot \[a-zA-Z0-9\].

Permalänk: https://www.webforum.nu/p/2193949

## #12 — MickeA.com, 2009-07-26T07:41Z

Tack för infon. Nu gjorde vi så att vi kräver inga speciella "mönster", t.ex. att det måste börja med en siffra. Däremot gjorde jag så att vi kräver minst en siffra, någonstans i lösenordet.

Permalänk: https://www.webforum.nu/p/2193993

## #13 — MickeA.com, 2009-08-12T09:20Z

Nu håller jag på att bli galen på den här kodsnutten:

```
Regex validateName   = new Regex(@"^[a-z]$", RegexOptions.IgnoreCase);
```

Varför tillåter den inte att jag fyller i "Micke" eller "micke" som namn?

```
if(!validateName.IsMatch(fname)){
   errorLbl.Text = Res.GetString("name_mismatch").Replace("%FIELD%", f_fname);
   errorPanel.Visible = true;
   return;
}
```

Vill även ha med - i mitt mönster, men får samma fel när jag testar *@"^\[a-z\\-\]$"*

Vad är problemet?

Tack!

Permalänk: https://www.webforum.nu/p/2198417

## #14 — voigtann1, 2009-08-12T09:27Z

^\[a-z\]$
säger:
^ = träff i börja av strängen
\[a-z\] = träffar 1 av följande tecken a-z
$ = träff i slutet av en sträng.

```
^[a-z]+$
```

behöver du nog köra + = 1 till hur många träffar som helst.

Permalänk: https://www.webforum.nu/p/2198419

## #15 — MickeA.com, 2009-08-12T09:36Z

Tack ska du ha!
Jag har försökt bli kompis med RegExp i tre år nu men det är mest bråk och tjafs jämt tycker jag. Kanske dags att ge upp? Haha..

Permalänk: https://www.webforum.nu/p/2198421

## #16 — voigtann1, 2009-08-12T09:39Z

Tycker jag inte!

Tyvärr kommer jag göra lite reklam nu men: RegExBuddy är ett av mina bättre köp och är ett underbart program att få ut regex kod i en del språk + kan enkelt se förklaring på dina koder, de släppte även en ny regex applikation för inte så länge sen.

Permalänk: https://www.webforum.nu/p/2198422

## #17 — MickeA.com, 2009-08-12T09:56Z

> **[voigtann1 skrev:](https://www.webforum.nu/p/1476546)**
>
> ...RegExBuddy är ett av mina bättre köp och är ett underbart program att få ut regex kod i en del språk + kan enkelt se förklaring på dina koder, de släppte även en ny regex applikation för inte så länge sen.

Det här ser riktigt bra ut! Blir till att köpa pronto. Tack för tipset!

Permalänk: https://www.webforum.nu/p/2198423

## #18 — Brimba, 2009-08-12T10:50Z

Jag håller med regexbuddy är ett väldigt bra verktyg för att skapa och testa sina regex, så det förtjänar lite reklam :)

Det andra verktyget som voigtann1 pratar om är regexmagic som skapar ett regex baserat på den text du matar in. Jag har dessvärre inte provat det.

Permalänk: https://www.webforum.nu/p/2198426

## #19 — voigtann1, 2009-08-12T11:27Z

Fundera på att köpa det, fast jag vet inte riktigt om jag har någon nytta med det, fast hade varit trevligt att se hur "bra" mönster den skapar.

Permalänk: https://www.webforum.nu/p/2198432

## #20 — sgtpepper, 2009-08-12T11:49Z

Hyffsat kassa krav för ett lösenord. Ett fyra tecken långt lösenord som bara innehåller alfanumeriska tecken bruteforce-knäcker man ju på sekunder...

Permalänk: https://www.webforum.nu/p/2198435

---

Tråden på webben: https://www.webforum.nu/amne/dotnet/179487-lösenordskontroll  
Nästa sida: https://www.webforum.nu/amne/dotnet/179487-lösenordskontroll/page2.md
