webForumDet fria alternativet

RegExp och förbjudna strängar

JavaScript

7 svar · 476 visningar · startad av MAge

Medlem sedan apr. 200333 inlägg
Frågan#1

Hej,

har ett input-element med ett init-värde. (Dubbelklicka för att använda din mail i namnet)
vad jag nu vill är att med RegExp kunna kolla ifall den fortfarande har det värdet när användaren försöker skicka.
Ända lösningen jag kommer på är att kolla tecken för tecken. Men verkar väldigt klumpigt sätt att attackera problemet.
(/^[^D][^u][^b][^b][^e][^l]...[^n][^a][^m][^n][^e][^t]$/)

/Jonas

Medlem sedan dec. 20025 483 inlägg
#2

Hejsan!

Det verkar enklare att spara init-strängen i en variabel och sedan jämföra input-elementets värde med denna:

var s = "Dubbelklicka för att använda din mail i namnet",
    i = [i]input[/i].value;

if (s == i)
    ...

Med regexp:

if (new RegExp("^"+ s +"$").test(i))
    ...

:)

Medlem sedan apr. 200333 inlägg
#3

Nae, det funkar inte riktigt så.
grejjen är att jag har gjort ett färdigt script som jag sen kan använda på mina formulär. Just denna delen där den kollar ifall inmatningsfältet följer mönstret jag bestämt använder sig av RegExp.
Gör jag som du sa och skriver /^min sträng$/ är det ända rätta svaret just "min sträng" man vad jag vill komma åt är att exakt "min sträng" får inte skickas via formuläret.
Visst de funkar att skriva så här /^[^m][^i][^n][^ ][^s][^t][^r][^ä][^n][^g]$/ men i mina ögon ser det väldigt klumpigt ut.

/Jonas

Medlem sedan dec. 20025 483 inlägg
#4

Men mitt exempel var just bara det: ett exempel. Vill du inte att "Dubbelklicka för att använda din mail i namnet" skall skickas får du negera if-satsen och vidta lämplig åtgärd:

if (!new RegExp("^"+ s +"$").test(i)){
    alert("Strängen är [b]ej[/b] 'Dubbelklicka för att använda din mail i namnet'");
}

:)

Medlem sedan apr. 200333 inlägg
#5

För att kunna använda ett script måste jag anropa den statiskt, vilket i det här fallet ändast tillåter att jag ger input-elementet ett mönster som den skall följa. Visst, det skulle säkert funka att skriva scriptet och låta det göra si och ibland så beroende på vad man vill ha ut.

Jag antar att den här diskussionen slutligen kommer leda till att det går helt enkelt inte sätta en "förbjuden" sträng precis som det gör med tecken ([^xyz])

:bire

/Jonas

Medlem sedan dec. 20025 483 inlägg
#6

Jag måste erkänna att jag inte riktigt förstår vad problemet är. Det är fullt möjligt att med re förbjuda vissa strängar i ett inputvärde att skickas.

Om vi tar nedanstående kod som ett exempel:

/^(min sträng)|(din sträng)|(vår sträng)$/.test("...")

Rätt applicerat kan du förhindra att ett inputelements värde är något av "min sträng", "din sträng", "vår sträng" då användaren skickar formuläret.

Eller menar du att det inte går?

:)

Medlem sedan apr. 200333 inlägg
#7

I scriptet har jag kan sätta olika egenskaper på mina inputfält. Där ibland ifall fältet måste vara ifyllt, om det ska jämnföras med nåt annat fält, ifall detta fältet inte är ifyllt måste detta vara ifyllt istället osv.
Sen har jag egenskapen "pattern" där jag bestämmer vilket mönster fältet skall följa (ifall de nu ska följa nåt mönster). Så säj exempelvis att jag har ett fält där jag vill att användaren skall skriva en e-mailadress skriver jag:

pattern : /^[\w-\.]+\@[\w\.-]+\.[a-zA-Z]{2,4}$/

vilket sen testas i

if(!pattern.test(this.objForm[fält].value)

och ditt exempel
"/^(min sträng)|(din sträng)|(vår sträng)$/

ger felmeddelande ifall användaren inte matat in "min sträng","din sträng","vår sträng" vilket är tvärtimot vad jag är ute efter

/Jonas

Medlem sedan apr. 200333 inlägg
#8

hmm, efter lite vidare tester visade det sig att /^[^a][^b][^c]$/ är ett väldigt dumt sätt att gå tillväga. Men följande RegExp förbjuder jag inte bara abc utan också admin, encitron osv osv. :r
Så jag gjorde helt enkelt en ny egenskap i scriptet och testar värdet på input-fältet mot egenskapen initval

/Jonas

262 ms totalt · 4 externa anrop · v20260731065814-full.a51de22e
123 ms — deklarationer (db)
0 ms — hämta statistik (cache)
134 ms — hämta tråd, inlägg och bilagor (db)
124 ms — ändringar (db)