[Gelöst] Fehler im JavaScript mit Regulären Ausdrücken

24. Februar 2011 14:47

Hallo zusammen,

innerhalb des Kontaktformulars soll die Usereingabe zur Telefonnummer und E-Mail-Adresse validiert werden. Dazu nutze ich zwei reguläre Ausdrücke, die im OnLoad-Ereignis des Formulars geladen werden und im OnChange-Ereignis des jeweiligen Attributs überprüft werden. Meine Umsetzung sieht wie folgt aus.

Script im OnLoad des Kontaktformulars:

Code:
//Überprüfung der Telefonnummer und E-Mail

var telefonCheck = "/^\+[0-9]{1,4} [0-9]{1,7} [0-9]{1,7}\-?[0-9]{1,7}$/";
var emailCheck = "([\w\-\.]+)@(([\w\-]{2,}\.)+[\w]{2,4})";

tsCheckEntry = function (eingabe,zupruefen) {
    if (zupruefen == "1") {
        return eingabe.match(telefonCheck);
    }
    else if (zupruefen == "2") {
        return eingabe.match(emailCheck);
    }
    else { }
}

Script im OnChange des Attributfeldes "Telefon":

Code:
if (crmForm.all.telephone1.DataValue != null) {
    var zupruefenid = "1";
    var gueltigkeit = tsCheckEntry(crmForm.all.telephone1.DataValue, zupruefenid);

    if (!gueltigkeit) {
        alert ("Das Format der Telefonnummer ist ungültig!");
    }
}

Script im OnChange des Attributfeldes "E-Mail":

Code:
if (crmForm.all.emailaddress1.DataValue != null) {
    var zupruefenid = "2";
    var gueltigkeit = tsCheckEntry(crmForm.all.emailaddress1.DataValue, zupruefenid);

    if (!gueltigkeit) {
        alert ("Das Format der E-Mail-Adresse ist ungültig!");
    }
}

Teste ich nun meine Implementierung, erhalte ich leider Fehler.

Gebe ich die ungültige Telefonnummer "1234" ein und verlasse das Feld, erscheint:

Fehler im benutzerdefinierten Ereignis dieses Felds.
Feld:telephone1
Ereignis:onchange
Fehler:Unerwarteter Quantifizierer

Gebe ich die ungültige E-Mail-Adresse "i@s.d" ein und verlasse das Feld, erscheint:

Fehler im benutzerdefinierten Ereignis dieses Felds.
Feld:emailaddress1
Ereignis:onchange
Fehler:Ungültiger Bereich in Zeichensatz

Was mache ich falsch? Anscheinend habe ich gerade ein Brett vor dem Kopf...

Gruß & Dank
Frank

PS: Sind die von mir gewählten Regulären Ausdürcke valide? Habt Ihr vielleicht noch bessere Ideen?
Zuletzt geändert von frankyue am 9. März 2011 12:26, insgesamt 1-mal geändert.

Re: Fehler im JavaScript mit Regulären Ausdrücken

24. Februar 2011 15:54

Hallo Frank,
ich habe jetzt nicht sofort einen Fehler gesehen. Ich habe aber für das gleiche Probleme eine andere Struktur. Ich definiere beim OnChange nur den Aufruf einer Funktion. Die Prüfungsfunktion haben ich dann beim OnLaod hinterlegt, damit ich auch bei OnSave auf diese Funktion zugreifen kann.

Ich weiss nicht, ob das jetzt besser ist. Ich wollte aber die RegEx-Ausdrücke undd die Rückmeldung an den Benutzer nur an einer Stelle haben, weil ich für 60 Länder das Format der Postleitzahl und im Telefon auch die korrekte Landesvorwahl überprüfen muss.

###########
OnChange Zip
##########

// ###### Format der PLZ wird überprüft
if(crmForm.all.address1_postalcode.DataValue != null)
{
var postalcode = tsCheckPostalcode (crmForm.all.address1_postalcode.DataValue);
if (!postalcode)
{
// Message for user is now in the function
crmForm.all.address1_postalcode.SetFocus();
}
}
// ++++++++++ Ende der Formatprüfung PLZ


###########
OnLoad: Es sind in Abhängigkeit vom Land die Variablen regEx und errorinfo (=Hinweis auf das korrekte Format) gefüllt
##########
tsCheckPostalcode = function(zip)
{
var LKZ = crmForm.all.new_country_code.DataValue;

switch (LKZ)
{
....
}

// Prüfung und Ausgabe des Hinweises für die Formatierung beim Fehler
var Ergebnis = zip.match(regEx);
if (Ergebnis == null)
{ var Message= 'Invalid ZIP Code format! The mandatory format for ' + LKZ + ' is: ' + errorinfo ;
alert( Message);
}

// Rückgabe der Funktion
return zip.match(regEx);
}


###########
OnSave (ich glaube, das ist für den Fall, dass man sofort speichert ohne das Feld PLZ zu verlassen.)
###########
// Es wird die Prüfung bei gefüllten PLZ-Feldern nochmals aufgerufen.
// Stopp der Speicherung bei negativer Überprüfung

Re: Fehler im JavaScript mit Regulären Ausdrücken

24. Februar 2011 16:04

Hallo Markus,

vielen Dank für Deine schnelle Antwort. Ich werde Deinen Code gleich in meinem System testen.
Es wäre jedoch auch schön, wenn mir Jemand bei meinem Code helfen könnte. Da wäre der Lerneffekt für mich am größten...

Gruß
Frank

Re: Fehler im JavaScript mit Regulären Ausdrücken

26. Februar 2011 17:57

Hallo Frank,

deine Definition der RegEx ausdrücke ist falsch, du darfst diese nicht in Hochkomma setzen.

Du must auch beim OnSave prüfen ob deine Bedungung erfüllt wird, da das OnChange nicht ausgeführt wird, wenn der Benutzer das Formular direkt speichert, ohne das Feld zu verlassen, siehe auch diesen Artikel zu dme Thema.

Re: Fehler im JavaScript mit Regulären Ausdrücken

1. März 2011 13:25

Hallo Michael,

leider ist Dein Lösungsvorschlag anscheinend auch falsch! :-(

Entferne ich die Hochkommata, wird die Telefonnummer nicht überprüft und die Fehlermeldung des E-Mail-Attributs bleibt bestehen. Ferner wird der Tooltip ausgeschaltet und andere Feldabhängigkeiten sind inaktiv. Gibt es noch einen anderen Lösungsansatz?

Außerdem erhalte ich beim Verlassen des Formulars einen Fehler, der wie folgt an Microsoft übermittel werden könnte:

Inhalt der Microsoft Dynamics CRM-Fehlerberichterstattung

<CrmScriptErrorReport>
<ReportVersion>1.0</ReportVersion>
<ScriptErrorDetails>
<Message>Ung&#252;ltiges Zeichen</Message>
<Line>285</Line>
<URL>...</URL>
<PageURL>...</PageURL>
<Function></Function>
<CallStack>
</CallStack>
</ScriptErrorDetails>
<ClientInformation>
<BrowserUserAgent>Mozilla&#47;4.0 &#40;compatible&#59; MSIE 7.0&#59; Windows NT 6.1&#59; WOW64&#59; Trident&#47;4.0&#59; SLCC2&#59; .NET CLR 2.0.50727&#59; .NET CLR 3.5.30729&#59; .NET CLR 3.0.30729&#59; Media Center PC 6.0&#59; InfoPath.3&#59; .NET4.0C&#41;</BrowserUserAgent>
<BrowserLanguage>de</BrowserLanguage>
<SystemLanguage>de</SystemLanguage>
<UserLanguage>de</UserLanguage>
<ScreenResolution>1680x1050</ScreenResolution>
<ClientName>Web</ClientName>
</ClientInformation>
<ServerInformation>
<OrgLanguage>1031</OrgLanguage>
<OrgCulture>1031</OrgCulture>
<UserLanguage>1031</UserLanguage>
<UserCulture>1031</UserCulture>
<OrgID>&#123;264FDE3F-9DED-DF11-845C-005056863432&#125;</OrgID>
<UserID>&#123;98808E88-9DED-DF11-845C-005056863432&#125;</UserID>
<CRMVersion>4.0.7333.3018</CRMVersion>
</ServerInformation>
</CrmScriptErrorReport>


Viele Grüße
Frank
Zuletzt geändert von frankyue am 2. März 2011 15:13, insgesamt 1-mal geändert.

Re: Fehler im JavaScript mit Regulären Ausdrücken

1. März 2011 13:42

Hallo Frank,

schau dir einmal diesen Artikel an. Die dort forgestellte Lösung verwende ich selber in diversen Projekten, die funktioniert mit Sicherheit.

Re: Fehler im JavaScript mit Regulären Ausdrücken

2. März 2011 11:59

Hallo Michael,

ich hatte bereits vor meinem ersten Implementierungsversuch Deinen Beitrag gelesen und mich daran orientiert.
Allerdings wollte ich eine Lösung für die Überprüfung von Telefon und E-Mail.

Als ich meinen Lösungsversuch gerade noch einmal programmiert und zeilenweise getestet habe, bin ich nun zu einer lauffähigen Lösung gekommen.
Zur Vollständigkeit poste ich diese nachfolgend.

Code für OnLoad-Ereignis des Formulars:
Code:
//Funktion zur Überprüfung der Telefonnummer und E-Mail

var regEx;
tsCheckEntry = function (eingabe, medium) {
   if (medium == "telefon") {
      regEx = /^\+[0-9]{1,4} [0-9]{1,7} [0-9]{1,7}\-?[0-9]{1,7}$/;
   }
   else if (medium == "email") {
      regEx = /^([\w-\.] )@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.)|(([\w-] \.) ))([a-zA-Z]{2,4}|[0-9]{1,3})(\]?)$/;
   }

   return eingabe.match(regEx);
}

Code für OnChange-Ereignis des Attributs "Telefonnummer":
Code:
//Funktion zur Überprüfung der Telefonnummer

if (crmForm.all.telephone1.DataValue != null) {
   var gueltig = tsCheckEntry(crmForm.all.telephone1.DataValue, "telefon");

   if (!gueltig) {
      alert ("Das Format der Telefonnummer ist ungültig!");
      crmForm.all.telephone1.SetFocus();
   }
}

Code für das OnChange-Ereignis des Attributs "E-Mail":
Code:
//Funktion zur Überprüfung der E-Mail

if (crmForm.all.emailaddress1.Datavalue != null) {
   var gueltig = tsCheckEntry(crmForm.all.emailaddress1.DataValue, "email");

   if (!gueltig) {
      alert ("Das Format der E-Mail-Adresse ist ungültig!");
      crmForm.all.emailaddress1.SetFocus();
   }
}

Die letzten beiden Code-Snippets habe ich natürlich auch in dem OnSave-Ereignis eingefügt.

Der Fehler meiner vorherigen Programmierung lag einerseits an den Hochkommata, andererseits aber an einem ungültigen Zeichen in dem Regulären Ausdruck.

Die jetzt von mir gewählten Ausdrücke sind lauffähig. Allerdings bin ich mit der Überprüfung der E-Mail-Adresse noch nicht 100%-ig zufrieden. Sie erlaubt eine E-Mail-Adresse ohne Domain-Angabe (z.B. "ich@du" ohne ".de"). Hat jemand einen besseren regulären Ausdruck? Meine Google-Recherchen haben da nichts besseres gefunden...

Gruß
Frank

Re: Fehler im JavaScript mit Regulären Ausdrücken

3. März 2011 11:02

Hallo Michael,

ich weiß, dass gelöste Beiträge mit dem Zusatz [Gelöst] editiert werden sollen und habe dies in der Vergangenheit (glaube ich) auch immer getan.
Nur habe ich in meinem vergangenen Posting noch eine Frage gestellt, die vielleicht in der Länge des Beitrags untergegangen ist:

Die jetzt von mir gewählten Ausdrücke sind lauffähig. Allerdings bin ich mit der Überprüfung der E-Mail-Adresse noch nicht 100%-ig zufrieden. Sie erlaubt eine E-Mail-Adresse ohne Domain-Angabe (z.B. "ich@du" ohne ".de"). Hat jemand einen besseren regulären Ausdruck? Meine Google-Recherchen haben da nichts besseres gefunden...

Viele Grüße
Frank

Re: Fehler im JavaScript mit Regulären Ausdrücken

3. März 2011 19:49

Hallo Frank,

ist wirklich untergegangen und sollte auch ein zweiter Beitrag sein, da er mit der ursprünglichen Frage nichts mehr zu tun hat.

Re: Fehler im JavaScript mit Regulären Ausdrücken

3. März 2011 20:28

frankyue hat geschrieben:Allerdings bin ich mit der Überprüfung der E-Mail-Adresse noch nicht 100%-ig zufrieden. Sie erlaubt eine E-Mail-Adresse ohne Domain-Angabe (z.B. "ich@du" ohne ".de"). Hat jemand einen besseren regulären Ausdruck? Meine Google-Recherchen haben da nichts besseres gefunden...


http://stackoverflow.com/questions/2013 ... es#tab-top
http://fightingforalostcause.net/misc/2 ... -regex.php
http://www.regular-expressions.info/email.html

Re: Fehler im JavaScript mit Regulären Ausdrücken

9. März 2011 12:26

Danke für die Links!!!