Toon posts:

[JS] Comment in regex escapen

Pagina: 1
Acties:
  • 271 views sinds 30-01-2008
  • Reageer

Verwijderd

Topicstarter
Ik zit met een klein probleempje. Ik heb de volgende regex, en daarin zitten de karakters //. Natuurlijk ziet javascript dit als een comment. Een workaround is om deze in een hidden input te zetten, maar ik zoek eigenlijk een nette oplossing.

de regex:
code:
1
var grmbl = /((mailto\:|(news|(ht|f)tp(s?))\://){1}\S+)/;

  • rollebol
  • Registratie: Mei 2000
  • Laatst online: 09-06 12:38
\/\/

[ Voor 192% gewijzigd door rollebol op 04-06-2003 23:00 . Reden: als het kort ook duidelijk is dan maar kort :) ]


Verwijderd

De slashes zijn ook al je delimiters. Die regex gaat zo niet eens werken, lijkt me, dus je moet ze escapen met backslashes.

Verwijderd

Topicstarter
doh |:( tuurlijk... dank u.. trash dit topic aub maar snel

Verwijderd

Verwijderd schreef op 04 June 2003 @ 22:59:

doh |:( tuurlijk... dank u.. trash dit topic aub maar snel
Neeee nee nee, dit is je straf: eeuwige schaamte >:)

  • crisp
  • Registratie: Februari 2000
  • Laatst online: 00:02

crisp

Devver

Pixelated

en dubbele punt hoef je juist weer niet te escapen; persoonlijk zou ik dit doen, is ook duidelijker en zelfs sneller denk ik:
JavaScript:
1
var grmbl = /(mailto:|(news|http(s?)|ftp):\/\/){1}\S+/;

[ Voor 3% gewijzigd door crisp op 04-06-2003 23:03 ]

Intentionally left blank


Verwijderd

crisp schreef op 04 June 2003 @ 23:01:
en dubbele punt hoe je juist weer niet te escapen; persoonlijk zou ik dit doen, is ook duidelijker en zelfs sneller denk ik:
JavaScript:
1
var grmbl = /((mailto:|(news|http(s?)|ftp):\/\/){1}\S+)/;
Als we toch bezig zijn: waarom dan die capturing group rond s? Waarom staan die buitenste haakjes daar? en die {1} heeft volgens mij nooit zin.
ftps is trouwens ook een bestaand protocol.

/(mailto:|(news|(ht|f)tps?):\/\/)\S+/

Verwijderd

Topicstarter
Deze regex is niet door mezelf geschreven. Ik was bezig met een generieke form validatie dus ik ben ook niet in de regex zelf gedoken, ik heb er nl. nog een stuk of wat zal het zijn 20 staan die getest moeten worden :)

Ik moet oa deze ook nog uitpluizen :) *hell*

var regex = /((^(10|12|0?[13578])([/])(3[01]|[12][0-9]|0?[1-9])([/])((1[8-9]\d{2})|([2-9]\d{3}))$)|(^(11|0?[469])([/])(30|[12][0-9]|0?[1-9])([/])((1[8-9]\d{2})|([2-9]\d{3}))$)|(^(0?2)([/])(2[0-8]|1[0-9]|0?[1-9])([/])((1[8-9]\d{2})|([2-9]\d{3}))$)|(^(0?2)([/])(29)([/])([2468][048]00)$)|(^(0?2)([/])(29)([/])([3579][26]00)$)|(^(0?2)([/])(29)([/])([1][89][0][48])$)|(^(0?2)([/])(29)([/])([2-9][0-9][0][48])$)|(^(0?2)([/])(29)([/])([1][89][2468][048])$)|(^(0?2)([/])(29)([/])([2-9][0-9][2468][048])$)|(^(0?2)([/])(29)([/])([1][89][13579][26])$)|(^(0?2)([/])(29)([/])([2-9][0-9][13579][26])$))/;

[ Voor 60% gewijzigd door Verwijderd op 04-06-2003 23:13 ]


  • crisp
  • Registratie: Februari 2000
  • Laatst online: 00:02

crisp

Devver

Pixelated

Verwijderd schreef op 04 June 2003 @ 23:05:
[...]

Als we toch bezig zijn: waarom dan die capturing group rond s? Waarom staan die buitenste haakjes daar? en die {1} heeft volgens mij nooit zin.
ftps is trouwens ook een bestaand protocol.

/(mailto:|(news|(ht|f)tps?):\/\/)\S+/
ik weet niet of TS de capturing groups opvangt of niet. Die {1} is idd nutteloos, verder heb ik zelf nog nooit ftps gezien, maar ik neem van je aan dat het bestaat :)
Verwijderd schreef op 04 June 2003 @ 23:11:
Deze regex is niet door mezelf geschreven. Ik was bezig met een generieke form validatie dus ik ben ook niet in de regex zelf gedoken, ik heb er nl. nog een stuk of wat zal het zijn 20 staan die getest moeten worden :)

Ik moet oa deze ook nog uitpluizen :) *hell*

[...]
leg eens in plain-text uit wat die regexp moet doen; mogelijk kunnen wij het vereenvoudigen :)

[ Voor 24% gewijzigd door crisp op 05-06-2003 00:33 ]

Intentionally left blank


  • Bosmonster
  • Registratie: Juni 2001
  • Laatst online: 19-08 22:14

Bosmonster

*zucht*

Is dat een geldigheidsvalidatie voor een creditcardnummer ofzo? :P

  • Clay
  • Registratie: Oktober 1999
  • Laatst online: 22-06 13:51

Clay

cookie erbij?

Ik moet oa deze ook nog uitpluizen :) *hell*

var regex = :X
gokje, een datum? :) vind em wel extreem lang. 't is een dikke halve K aan code.

Instagram | Flickr | "Let my music become battle cries" - Frédéric Chopin


Verwijderd

Topicstarter
Het is inderdaad een datum validatie maar ook met controles op schrikkeljaren :)

  • Bosmonster
  • Registratie: Juni 2001
  • Laatst online: 19-08 22:14

Bosmonster

*zucht*

ach ja.. doek liever serverside dat soort dingen :)

php check_date() bijvoorbeeld..

kun je in JS niet gewoon een Date ervan maken en kijken of die geldig is ofzo?

  • Clay
  • Registratie: Oktober 1999
  • Laatst online: 22-06 13:51

Clay

cookie erbij?

Wie heeft dat ding geschreven joh? _/-\o_ :D
Overigens check ik de geldigheid van een datum liever met het datum object van javascript zelf. Schrikkeljaar kan b.v. heel makkelijk:

code:
1
2
3
4
5
6
7
function isLeap(year) {
    return (new Date(year,1,29).getMonth() == 1)
}

alert(isLeap(1996))
alert(isLeap(1997))
alert(isLeap(2024))


Berust erop dat 32 januari automagisch 1 februari wordt, dus 29 februari wordt in een niet schrikkeljaar 1 maart. Zo kan je ook data met 3voudige input checken. Al gaat dat er dan wel vanuit dat je niet 1 veld gebruikt om een datum te vragen (al kan dat ook, indirect) :{

Instagram | Flickr | "Let my music become battle cries" - Frédéric Chopin


  • crisp
  • Registratie: Februari 2000
  • Laatst online: 00:02

crisp

Devver

Pixelated

voor datumvalidatie gebruik ik altijd gewoon een functie; vele malen sneller en overzichtelijker:
JavaScript:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
function validdate(date) {

  var daysinmonth = [31,29,31,30,31,30,31,31,30,31,30,31];

  var date_array = date.match(/^(\d{1,2})[/-](\d{1,2})[/-](\d{1,4})$/);
  if (!date_array) return false;

  var date_day = parseInt(date_array[1], 10);
  var date_month = parseInt(date_array[2], 10) - 1;
  var date_year = parseInt(date_array[3], 10);

  if (date_month > 11 || date_month < 0) return false;
  if (date_day > daysinmonth[date_month]) return false;

  if (date_month == 1 && date_day == 29) {

    if (date_year < 100) date_year += 2000;
    if (date_year % 100 == 0 && date_year % 400 != 0) return false;
    if (date_year % 4 != 0) return false;

  }

  return true;

}


is een stukje oude code; zal kijken of ik 'm nog een beetje mooier kan maken
zo dan :)

[ Voor 27% gewijzigd door crisp op 05-06-2003 12:40 ]

Intentionally left blank


  • BtM909
  • Registratie: Juni 2000
  • Niet online

BtM909

Watch out Guys...

crisp schreef op 05 juni 2003 @ 12:25:
voor datumvalidatie gebruik ik altijd gewoon een functie; vele malen sneller en overzichtelijker:
JavaScript:
1
2
3
function validdate(date) {
! WOW !
}


is een stukje oude code; zal kijken of ik 'm nog een beetje mooier kan maken :)
Wat is het doel (:P) van je functie? Alleen kijken of een datum correct is? Dan ben je toch sneller af door een nieuwe datum object te maken en checken of je input gelijk is gebleven (dan is het nl. een correcte datum)?

Ace of Base vs Charli XCX - All That She Boom Claps (RMT) | Clean Bandit vs Galantis - I'd Rather Be You (RMT)
You've moved up on my notch-list. You have 1 notch
I have a black belt in Kung Flu.


  • crisp
  • Registratie: Februari 2000
  • Laatst online: 00:02

crisp

Devver

Pixelated

BtM909 schreef op 05 juni 2003 @ 12:37:
[...]

Wat is het doel (:P) van je functie? Alleen kijken of een datum correct is? Dan ben je toch sneller af door een nieuwe datum object te maken en checken of je input gelijk is gebleven (dan is het nl. een correcte datum)?
Dan heb je uiteindelijk nog net zoveel code ongeveer:
-string splitsen
-date object maken
-dag maand en jaar uit date object halen
-dag maand en jaar controleren met originele gesplitste waarden

Intentionally left blank


  • Clay
  • Registratie: Oktober 1999
  • Laatst online: 22-06 13:51

Clay

cookie erbij?

dan zou ik em dus zo doen, met genoemde Date() "truuk":

code:
1
2
3
4
5
6
7
8
9
10
function validdate(date) {
  var data = date.match(/^(\d{1,2})[/-](\d{1,2})[/-](\d{1,4})$/);
  if (!data) return false;

  var dd = parseInt(data[1], 10);
  var mm = parseInt(data[2], 10) - 1;
  var yy = parseInt(data[3], 10);

  return (new Date(yy, mm, dd).getMonth() == mm)
}

Instagram | Flickr | "Let my music become battle cries" - Frédéric Chopin


  • BtM909
  • Registratie: Juni 2000
  • Niet online

BtM909

Watch out Guys...

crisp schreef op 05 June 2003 @ 12:46:
[...]

Dan heb je uiteindelijk nog net zoveel code ongeveer:
-string splitsen
-date object maken
-dag maand en jaar uit date object halen
-dag maand en jaar controleren met originele gesplitste waarden
Valt toch wel mee?

simpel opzetje:

JavaScript:
1
2
3
4
5
6
7
8
9
10
function validDate(jaar, maand, dag){
  var dateToCheck = new Date();
  dateToCheck.setYear(jaar);
  dateToCheck.setMonth(maand + 1);
  dateToCheck.setDate(dag);

  if (dateToCheck.getYear() != jaar) { alert('fout') }
  if (dateToCheck.getMonth() != (maand + 1)) { alert('fout') }
  if (dateToCheck.getDate() != dag) { alert('fout') }
}

Ace of Base vs Charli XCX - All That She Boom Claps (RMT) | Clean Bandit vs Galantis - I'd Rather Be You (RMT)
You've moved up on my notch-list. You have 1 notch
I have a black belt in Kung Flu.


  • crisp
  • Registratie: Februari 2000
  • Laatst online: 00:02

crisp

Devver

Pixelated

Clay schreef op 05 June 2003 @ 13:12:
dan zou ik em dus zo doen, met genoemde Date() "truuk":

code:
1
2
3
4
5
6
7
8
9
10
function validdate(date) {
  var data = date.match(/^(\d{1,2})[/-](\d{1,2})[/-](\d{1,4})$/);
  if (!data) return false;

  var dd = parseInt(data[1], 10);
  var mm = parseInt(data[2], 10) - 1;
  var yy = parseInt(data[3], 10);

  return (new Date(yy, mm, dd).getMonth() == mm)
}
netjes :)
idd slim om alleen de maand te controleren :)

Intentionally left blank


  • Clay
  • Registratie: Oktober 1999
  • Laatst online: 22-06 13:51

Clay

cookie erbij?

op zich zou je dan ook rond de 360 als dag op kunnen geven, een jaar verder klopt de maand op zich ook, maar dat lost je regexp op :)

Instagram | Flickr | "Let my music become battle cries" - Frédéric Chopin

Pagina: 1