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?
^ 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.
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
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.
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
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.
266 ms totalt · 4 externa anrop · v20260731065814-full.a51de22e