webForumDet fria alternativet
Logga in / Bli medlem

regexp till Null

JavaScript

12 svar · 318 visningar · startad av Palle

Medlem sedan apr. 20003 174 inlägg
Trådstart#1

Använder en regexp-funktion i ett textfält för att det endast skall användas siffror i fältet,
om jag skriver en bokstav så försvinner den - korrekt. Men värdet blir ändå mer än "inget"..

[red]<input type="text" name="bar" onkeyup="this.value=this.value.replace(/\D/g,'');" />[/red]

Jag använder sedan en annan funktion för att kolla så att något värde postats i fältet,
tyvärr uppfylls alltid if-satsen hur jag än gör.

[red]if(document.foo.bar.value!=='') { alert('whatever..'); }[/red]

Förmodar att jag bör göra något med regexp-funktionen för att verkligen få den "tom".
Frågan är bara vad?

 

Medlem sedan dec. 20025 483 inlägg
#2

Hint: slarvfel nedan ;)

if(document.foo.bar.value![b]==[/b]'') { alert('whatever..'); }

:)

Medlem sedan nov. 20014 054 inlägg
#3

Visst du hindrar den från att ange en bokstav, men du kan fortfarande ange ett blanksteg el?
Och om variabeln innehåller ett blanksteg så får den ett värde som inte är null.

Dvs var = " ";

då har var ett värde som är 1 om du kör lenght(var) t ex.

:OO

Medlem sedan sep. 20021 655 inlägg
#4

Peter S skrev:

Hint: slarvfel nedan ;)

if(document.foo.bar.value![b]==[/b]'') { alert('whatever..'); }

:)

Är det samma sak i JavaScript som PHP, att !== kontrollerar både innehåll och typ? alert('whatever..') körs alltså om document.foo.bar.value inte har samma värde eller typ som ''?

Medlem sedan apr. 20003 174 inlägg
#5

Har även testat detta utan önskat resultat:

[red] onkeyup="re=/(\d*)/; re.exec(this.value); this.value=RegExp.$1;"[/red]

Peter: *gnuggar ögonen* Va?

Fredde: Jag kan göra mellanslag, men det tas genast bort av funktionen och problemet kvarstår.

Medlem sedan nov. 20014 054 inlägg
#6
if(document.foo.bar.value!=='') { alert('whatever..'); }

om du använder istället

if(document.foo.bar.value!=null) { alert('whatever..'); }

fungerar det bättre?? :q

Medlem sedan dec. 20025 483 inlägg
#7

dectgap: Korrekt.

Skall även passa på att rätta mig själv lite grand. Strikt sagt är det inte fel att skriva !== i detta fall, dock redundant eftersom typerna ändå är ekvivalenta.

Utöver det fungerar skriptet iallafall för mig.

Palle: Om det är meningen att användaren skall göras uppmärksam när det ej är något värde i fältet kan du ta bort !-operatorn från if-satsen.

:)

Medlem sedan apr. 20003 174 inlägg
#8

Aha, ok. Då förstår jag den biten. :bire

Nja, meningen är att funktionen i skarpt läge skall låsa ett annat fält om något värde finns.
Som det är nu låses fältet, men det låses inte upp igen om man plockar bort värdena.

Hängde ni med på min invecklade förklaring? ;)

[red] function diss(){
	if(document.foo.bar.value!=null){
		document.foo.fbbf.disabled=false;
	} else {
		document.foo.fbbf.disabled=true;
	}
}[/red]

Tillägg: Fältet låses heller inte upp om man t.ex anger en bokstav som sedan regexp-funktionen tar bort..

 

Medlem sedan dec. 20025 483 inlägg
#9
function diss(){
 if(document.foo.bar.value.length == 0){
  document.foo.fbbf.disabled=false;
 } else {
  document.foo.fbbf.disabled=true;
 }
}

...

<input type="text" name="bar" onkeyup="this.value=this.value.replace(/\D/g,''); diss()" />

:)

Medlem sedan apr. 20003 174 inlägg
#10

Jo, serru.. den har jag redan testat. ;) :bire

Till saken är att det finns fler textfält som heter bar,
och då fungerar det tyvärr inte med value.length.

  :(

Medlem sedan dec. 20025 483 inlägg
#11

Då skulle din tidigare kod resultera i ett "undefined". Om det nu är så att du har fler fält med namnet "bar" så kan du göra så här:

if (document.forms["foo"].elements["bar"][[b]index[/b]].value.length == 0)
 // ...

Där index är det fält i "bar"-hierarkin som representerar ditt önskade.

:)

Medlem sedan sep. 20021 655 inlägg
#12

Palle skrev:

Till saken är att det finns fler textfält som heter bar,
och då fungerar det tyvärr inte med value.length.

Men du kan väl inte gärna ha flera textfält med samma namn?

Annars kan du ju skicka "this.value.length" som argument till diss().

Medlem sedan apr. 20003 174 inlägg
#13

Peter: Den koden var bara en dummy som jag testade med. Ska göra ett försök ikväll igen, nu är det dags för annat sköjj.. :OO ;)

dectgap: Uh´jo, det går utmärkt. Skapar arrayer i asp med dessa värden sedan, då är dem komma-separerade värdena utmärkta och spar tid.

Tack så länge! :bire

261 ms totalt · 4 externa anrop · v20260731065814-full.51f67c91
125 ms — deklarationer (db)
0 ms — hämta statistik (cache)
134 ms — hämta tråd, inlägg och bilagor (db)
121 ms — ändringar (db)