---
title: "RegExp: Tillåt bara siffror och bokstäver"
type: "forum-thread"
url: "https://www.webforum.nu/amne/asp/166723-regexp-tillåt-bara-siffror-och-bokstäver"
topic: "ASP"
topic_url: "https://www.webforum.nu/amne/asp"
author: "Sasch"
published: "2007-11-27T01:29:36.000Z"
updated: "2007-11-28T05:38:31.000Z"
replies: 13
views: 1267
page: 1
pages: 1
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/asp/166723-regexp-tillåt-bara-siffror-och-bokstäver"
---

# RegExp: Tillåt bara siffror och bokstäver

## #1 — Sasch, 2007-11-27T01:29Z

Tänkte göra en koll på användarnamn och lösenord så dessa bara klarar av att mecka in bokstäver (A-z)(0-9) till databasen (alltså, "&" och alla andra konstiga tecken ska generera ett fel (False))...

Men jag har en känsla att min RegExp inte är speciellt sammarbetsam i det läget:

```
 Function isValidName(myUserName)
  dim isValidU, regEx ' ## A-z 0-9 only
  
  isValidU = True
  SET regEx = New RegExp
  regEx.IgnoreCase = False
  regEx.Pattern = "^[a-zA-Z]*[a-zA-Z0-9]$"
  isValidU = regEx.Test(myUserName)
  
  isValidName = isValidU
 End Function
```

Vad jag läst mig till är att "$" förväntar sig att det ska fortsätta efter eller att det är sluttecknet det mönstret gäller, stämmer det eller har jag fått det helt om bakfoten?

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

## #2 — nitro2k01, 2007-11-27T02:11Z

^ markerar början av strängen och $ slutet.
Jag tror den regex du vill ha är: **"^\[a-z\]\[a-z0-9\]\*$"**
Den gör att bara siffror och bokstäver tillåts, men att användarnamn inte får börja med en siffra. 
Som du hade skrivit den så matchade den ett godtyckligt antal bokstäver, men tillåter endast sista tecknet att vara en siffra.
Dessutom har jag som du ser tagit bort A-Z ur uttrycken, och det kräver att du ändrar raden ovanför till: **regEx.IgnoreCase = True**
jag ser ingen som helst anledning att i ditt fall sätta IgnoreCase till False.

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

## #3 — voigtann1, 2007-11-27T06:53Z

Som nitro2k01 skriver.. du kan även korta ner den lite mer:

```
^[a-z][a-z\d]*$
```

Om jag hade varit dig så hade jag nog skrivit om koden lite... du sätter värdet som "true" som default. Man ska nog aldrig vara så "god" mot användaren att man förväntar sig att dom skriver rätt. Du kan även låta den retunera regEx test värdet direkt till "isValidName":

```
Function isValidName(myUserName)
	With New RegExp
		.IgnoreCase = False
		.Pattern = "^[a-z][a-z\d]*$"
		isValidName = .Test(myUserName))
	End With
End Function
```

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

## #4 — asp, 2007-11-27T08:54Z

En fråga, varför har ni med \[a-z\] och \[a-z\\d\]?

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

## #5 — voigtann1, 2007-11-27T09:12Z

\[\] kapslar in en "range" på vad som skall träffas.
Träffar ett något av teckna i listan nedan:
  Ett Tecken mellan a-z
  ett nummer 0-9

och varför \[a-z\]\[a-z\\d\]\* är enkla anledningen att användar namnen måste (oftast i alla fall) börja på en bokstav.

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

## #6 — Sasch, 2007-11-27T13:00Z

Så om man vill att ett namn kan börja med en siffra så räcker det alltså med "\[a-z\\d\]\*"?

Om man vill vara så godtycklig att låta användaren använda underscore och bindestreck, hur blir det då? Något i denna stilen?

```
[a-z][a-z_-\d]*"
```

Tror det gick att göra så här om man använde nitro2k01 mönster (Eller blir det väldigt fel då?);

```
^[a-z][a-z0-9_-]*$
```

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

## #7 — Gein, 2007-11-27T13:10Z

> **Sasch skrev:**
>
> Så om man vill att ett namn kan börja med en siffra så räcker det alltså med "\[a-z\\d\]\*"?

red/ Läste fel. Ja, det räcker så då: **^\[a-z\\d\]\*$**

> **Sasch skrev:**
>
> Om man vill vara så godtycklig att låta användaren använda underscore och bindestreck, hur blir det då? Något i denna stilen?
>
> ```
> [a-z][a-z_-\d]*"
> ```
>
> 
> 
> 
> Tror det gick att göra så här om man använde nitro2k01 mönster (Eller blir det väldigt fel då?);
>
> ```
> ^[a-z][a-z0-9_-]*$
> ```

\- är ju en operator inom \[\], nu är det möjligt att det fungerar iaf eftersom du har satt bindestrecket sist men för att vara på den säkra sidan bör du escape:a det tecknet:
**^\[a-z\]\[a-z0-9\_\\-\]\*$**
**^\[a-z\]\[a-z\_\\-\\d\]\*$** borde också fungera.

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

## #8 — Sasch, 2007-11-27T13:37Z

Tusen tack för alla bra svar hörni :bire

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

## #9 — nitro2k01, 2007-11-27T15:48Z

Jag hävdar att **^\[a-z\\d\]\*$** bör vara **^\[a-z\\d\]+$**
Den förstnämnda släpper nämligen även igenom en tom sträng.

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

## #10 — Gein, 2007-11-27T15:51Z

> **nitro2k01 skrev:**
>
> Jag hävdar att **^\[a-z\\d\]\*$** bör vara **^\[a-z\\d\]+$**
> Den förstnämnda släpper nämligen även igenom en tom sträng.

Bra noterat!

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

## #11 — voigtann1, 2007-11-27T16:01Z

> **Sasch skrev:**
>
> Tror det gick att göra så här om man använde nitro2k01 mönster (Eller blir det väldigt fel då?);

Nej.. det blir inte fel.. men varför inte använda \\d som uppfyller dina krav istället för att göra en "range" av nummer...

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

## #12 — Sasch, 2007-11-27T16:52Z

> **voigtann1 skrev:**
>
> Nej.. det blir inte fel.. men varför inte använda \\d som uppfyller dina krav istället för att göra en "range" av nummer...

Eftersom jag inte lärt mig \\d riktigt när jag frågade och enbart läst om den andra så tedde det sig lättare att fråga om den andra ;), Men det jag använder nu ser alltså ut så här, vilket dessutom fungerar utmärkt;

```
 Function isValidName(myUserName)
 ' ### Kontrollerar användarnamn, Only A-z 0-9 _ -
	With New RegExp
		.IgnoreCase = True
		.Pattern = "^[a-z][a-z_\-\d]+$"
		isValidName = .Test(myUserName)
	End With
 End Function
```

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

## #13 — Gein, 2007-11-27T20:58Z

> **voigtann1 skrev:**
>
> Nej.. det blir inte fel.. men varför inte använda \\d som uppfyller dina krav istället för att göra en "range" av nummer...

Finns det något som säger att \\d är överlägsen 0-9 prestandamässigt?
(Beror väl troligtvis på implementationen)

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

## #14 — voigtann1, 2007-11-28T05:38Z

Inte vad jag vet... men anser att det är bättre att använda \\d än 0-9.. det är ju trots allt bättre att använda a-z istället för abcdefgh.... men 0-9 och \\d är samma sak. Vad jag vet så är det ingen direkt prestanda ökning eller minskning.

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

---

Tråden på webben: https://www.webforum.nu/amne/asp/166723-regexp-tillåt-bara-siffror-och-bokstäver
