isDate: JavaScript -> Java

Status
Nicht offen für weitere Antworten.

automatix

Aktives Mitglied
Hallo Forum,

vor kurzem bin ich im Netz auf JS-Datum-Validierung gestoßen. Würde gerne den Algorithmus in meinen Java-Programmen verwenden und habe Schwierigkeiten bei der JS-Java-Übersetzung...

So sieht der JS-Code aus:
Code:
//(c) [url]http://www.smartwebby.com/DHTML/date_validation.asp[/url] :: überarbeitet
/**
 * DHTML date validation script. Courtesy of SmartWebby.com ([url]http://www.smartwebby.com/dhtml/[/url])
 */
// Declaring valid date character, minimum year and maximum year
var dtCh= ".";
var minYear=1900;
var maxYear=2099;
function isInteger(s){
	var i;
    for (i = 0; i < s.length; i++){   
        // Check that current character is number.
        var c = s.charAt(i);
        if (((c < "0") || (c > "9"))) return false;
    }
    // All characters are numbers.
    return true;
}
function stripCharsInBag(s, bag){
	var i;
    var returnString = "";
    // Search through string's characters one by one.
    // If character is not in bag, append to returnString.
    for (i = 0; i < s.length; i++){   
        var c = s.charAt(i);
        if (bag.indexOf(c) == -1) returnString += c;
    }
    return returnString;
}
function daysInFebruary (year){
	// February has 29 days in any year evenly divisible by four,
    // EXCEPT for centurial years which are not also divisible by 400.
    return (((year % 4 == 0) && ( (!(year % 100 == 0)) || (year % 400 == 0))) ? 29 : 28 );
}
function DaysArray(n) {
	for (var i = 1; i <= n; i++) {
		this[i] = 31
		if (i==4 || i==6 || i==9 || i==11) {this[i] = 30}
		if (i==2) {this[i] = 29}
   } 
   return this
}
function isDate(dtStr){
	var daysInMonth = DaysArray(12)
	var pos1=dtStr.indexOf(dtCh)
	var pos2=dtStr.indexOf(dtCh,pos1+1)
	var strDay=dtStr.substring(0,pos1)
	var strMonth=dtStr.substring(pos1+1,pos2)
	var strYear=dtStr.substring(pos2+1)
	strYr=strYear
	if (strDay.charAt(0)=="0" && strDay.length>1) strDay=strDay.substring(1)
	if (strMonth.charAt(0)=="0" && strMonth.length>1) strMonth=strMonth.substring(1)
	for (var i = 1; i <= 3; i++) {
		if (strYr.charAt(0)=="0" && strYr.length>1) strYr=strYr.substring(1)
	}
	month=parseInt(strMonth)
	day=parseInt(strDay)
	year=parseInt(strYr)
	if (pos1==-1 || pos2==-1){
		//alert("The date format should be : mm/dd/yyyy")
		return false
	}
	if (strMonth.length<1 || month<1 || month>12){
		//alert("Please enter a valid month")
		return false
	}
	if (strDay.length<1 || day<1 || day>31 || (month==2 && day>daysInFebruary(year)) || day > daysInMonth[month]){
		//alert("Please enter a valid day")
		return false
	}
	if (strYear.length != 4 || year==0 || year<minYear || year>maxYear){
		//alert("Please enter a valid 4 digit year between "+minYear+" and "+maxYear)
		return false
	}
	if (dtStr.indexOf(dtCh,pos2+1)!=-1 || isInteger(stripCharsInBag(dtStr, dtCh))==false){
		//alert("Please enter a valid date")
		return false
	}
return true
}
Und hier mein Übersetzungsversuch:
Code:
	//(c) [url]http://www.smartwebby.com/DHTML/date_validation.asp[/url] :: überarbeitet
	/**
	 * DHTML date validation script. Courtesy of SmartWebby.com ([url]http://www.smartwebby.com/dhtml/[/url])
	 */
	// Declaring valid date character, minimum year and maximum year
//	String dtCh = ".";
//	int minYear = 1900;
//	int maxYear = 2099;
	public static boolean isInteger(String str) {
	    for (int i = 0; i < str.length(); i++){
	    	int num = -1;
	        // Check that current character is number.
	        char character = str.charAt(i);
	        try {
				num = Integer.parseInt(character + "");
			} catch (Exception e) {
				return false;
			}
	        if (((num < 0) || (num > 9))) {
	        	return false;
	        }
	    }
	    // All characters are numbers.
	    return true;
	}
	
	public static String stripCharsInBag(String str, String bag) {
	    String returnString = "";
	    // Search through string's characters one by one.
	    // If character is not in bag, append to returnString.
	    for (int i = 0; i < str.length(); i++){   
	        char character = str.charAt(i);
	        if (bag.indexOf(character) == -1) returnString += character;
	    }
	    return returnString;
	}
	
	public static int daysInFebruary (int year) {
		// February has 29 days in any year evenly divisible by four,
	    // EXCEPT for centurial years which are not also divisible by 400.
	    return (((year % 4 == 0) && ( (!(year % 100 == 0)) || (year % 400 == 0))) ? 29 : 28);
	}
	
	function DaysArray(n) {
		for (var i = 1; i <= n; i++) {
			this[i] = 31
			if (i==4 || i==6 || i==9 || i==11) {this[i] = 30}
			if (i==2) {this[i] = 29}
	   } 
	   return this
	}
	
	public static boolean isDate(String dtStr) {
		// configurations #start#
		String dtCh = ".";
		int minYear = 1900;
		int maxYear = 2099;
		// configurations #stop#
		var daysInMonth = DaysArray(12);
		int pos1 = dtStr.indexOf(dtCh);
		int pos2 = dtStr.indexOf(dtCh, pos1 + 1);
		String strDay = dtStr.substring(0, pos1);
		String strMonth = dtStr.substring(pos1 + 1, pos2);
		String strYear = dtStr.substring(pos2 + 1);
		strYr = strYear;
		if (strDay.charAt(0) == '0' && strDay.length() > 1) strDay=strDay.substring(1);
		if (strMonth.charAt(0) == '0' && strMonth.length() > 1) strMonth=strMonth.substring(1);
		for (int i = 1; i <= 3; i++) {
			if (strYr.charAt(0) == '0' && strYr.length() > 1) strYr = strYr.substring(1);
		}
		int month = Integer.parseInt(strMonth);
		int day = Integer.parseInt(strDay);
		int year = Integer.parseInt(strYr);
		if (pos1 == -1 || pos2 == -1) {
			//alert("The date format should be : mm/dd/yyyy")
			return false;
		}
		if (strMonth.length() < 1 || month < 1 || month > 12) {
			//alert("Please enter a valid month")
			return false;
		}
		if (
			strDay.length() < 1 ||
			day < 1 || day > 31 ||
			(month == 2 && day > daysInFebruary(year)) ||
			day > daysInMonth[month]
		){
			//alert("Please enter a valid day")
			return false;
		}
		if (strYear.length() != 4 || year == 0 || year < minYear || year > maxYear){
			//alert("Please enter a valid 4 digit year between "+minYear+" and "+maxYear)
			return false;
		}
		if (dtStr.indexOf(dtCh, pos2 + 1) != -1 || isInteger(stripCharsInBag(dtStr, dtCh)) == false){
			//alert("Please enter a valid date")
			return false;
		}
		return true;
	}
Ist schon fast fertig, nur einige wenige Zeilen bereiten mir Probleme: 44-51, 59, 65, 69, 73.

Hatt jemand ne Idee, wie man diese Zeilen java'isieren kann? :)

Danke.
 

automatix

Aktives Mitglied
Klasse! Vielen Dank!

Es wäre aber trotzdem interessant zu wissen, wie dieser JS-Code in Java aussehen würde.
 
S

SlaterB

Gast
44-51

schreibe normale Methoden, 'static', Rückgabewert usw.,
das 'this' soll wohl ein neues Array-Objekt sein,
erstell doch eins wie man Arrays so erstellt in Java,
wenn dir das unbekannt ist, bringt es doch nix, jetzt irgendwelchen Code zu korrigieren

Methoden klein schreiben!

59

var gibts nicht, es gibt int, String oder sonstwas, DaysArray(12) dürfte ein Array sein

65

Variablen ordentlich deklarieren,
Typ name = wert;

69, 73
sehe da kein Problem, was ist an 73 so anders als an 72 oder 71?
dass strYr nicht korrekt definiert ist, dürfte sicherlich Auswirkungen haben
 

automatix

Aktives Mitglied
Hallo SlaterB,

ne, wie man Arrays anlegt und Variablen und Methoden definiert, weiß ich schon, aber ich hab probleme mit diesem JS-"this". Das ist ein Array, genauer ein int-Array. Bloß welcher Länge? Ich habe jetzt die Länge auf (Input-Wert) n+1 gesetzt. Und so sieht jetzt der Code aus:
Code:
	//(c) [url]http://www.smartwebby.com/DHTML/date_validation.asp[/url] :: überarbeitet
	/**
	 * DHTML date validation script. Courtesy of SmartWebby.com ([url]http://www.smartwebby.com/dhtml/[/url])
	 */
	// Declaring valid date character, minimum year and maximum year
//	String dtCh = ".";
//	int minYear = 1900;
//	int maxYear = 2099;
	public static boolean isInteger(String str) {
	    for (int i = 0; i < str.length(); i++){
	    	int num = -1;
	        // Check that current character is number.
	        char character = str.charAt(i);
	        try {
				num = Integer.parseInt(character + "");
			} catch (Exception e) {
				return false;
			}
	        if (((num < 0) || (num > 9))) {
	        	return false;
	        }
	    }
	    // All characters are numbers.
	    return true;
	}
	
	public static String stripCharsInBag(String str, String bag) {
	    String returnString = "";
	    // Search through string's characters one by one.
	    // If character is not in bag, append to returnString.
	    for (int i = 0; i < str.length(); i++){   
	        char character = str.charAt(i);
	        if (bag.indexOf(character) == -1) returnString += character;
	    }
	    return returnString;
	}
	
	public static int daysInFebruary (int year) {
		// February has 29 days in any year evenly divisible by four,
	    // EXCEPT for centurial years which are not also divisible by 400.
	    return (((year % 4 == 0) && ( (!(year % 100 == 0)) || (year % 400 == 0))) ? 29 : 28);
	}
	
	public static int[] DaysArray(int n) {
		int[] thisArr = new int[n + 1];
		for (int i = 1; i <= n; i++) {
			thisArr[i] = 31;
			if (i == 4 || i==6 || i==9 || i==11) {
				thisArr[i] = 30;
			}
			if (i == 2) {
				thisArr[i] = 29;
			}
	   } 
	   return thisArr;
	}
	
	public static boolean isDate(String dtStr, String dtCh, int minYear, int maxYear) {
		// configurations #start#
//		String dtCh = ".";
//		int minYear = 1900;
//		int maxYear = 2099;
		// configurations #stop#
		int[] daysInMonth = DaysArray(12);
		int pos1 = dtStr.indexOf(dtCh);
		int pos2 = dtStr.indexOf(dtCh, pos1 + 1);
		String strDay = dtStr.substring(0, pos1);
		String strMonth = dtStr.substring(pos1 + 1, pos2);
		String strYear = dtStr.substring(pos2 + 1);
		String strYr = strYear;
		if (strDay.charAt(0) == '0' && strDay.length() > 1) strDay=strDay.substring(1);
		if (strMonth.charAt(0) == '0' && strMonth.length() > 1) strMonth=strMonth.substring(1);
		for (int i = 1; i <= 3; i++) {
			if (strYr.charAt(0) == '0' && strYr.length() > 1) strYr = strYr.substring(1);
		}
		int month = Integer.parseInt(strMonth);
		int day = Integer.parseInt(strDay);
		int year = Integer.parseInt(strYr);
		if (pos1 == -1 || pos2 == -1) {
			//alert("The date format should be : mm/dd/yyyy")
			return false;
		}
		if (strMonth.length() < 1 || month < 1 || month > 12) {
			//alert("Please enter a valid month")
			return false;
		}
		if (
			strDay.length() < 1 ||
			day < 1 || day > 31 ||
			(month == 2 && day > daysInFebruary(year)) ||
			day > daysInMonth[month]
		){
			//alert("Please enter a valid day")
			return false;
		}
		if (strYear.length() != 4 || year == 0 || year < minYear || year > maxYear){
			//alert("Please enter a valid 4 digit year between "+minYear+" and "+maxYear)
			return false;
		}
		if (dtStr.indexOf(dtCh, pos2 + 1) != -1 || isInteger(stripCharsInBag(dtStr, dtCh)) == false){
			//alert("Please enter a valid date")
			return false;
		}
		return true;
	}
Scheint zu funktionieren.
 

automatix

Aktives Mitglied
Code:
	//(c) [url]http://www.smartwebby.com/DHTML/date_validation.asp[/url] :: überarbeitet
	/**
	 * DHTML date validation script. Courtesy of SmartWebby.com ([url]http://www.smartwebby.com/dhtml/[/url])
	 */
	public static int daysInFebruary (int year) {
		// February has 29 days in any year evenly divisible by four,
	    // EXCEPT for centurial years which are not also divisible by 400.
	    return (((year % 4 == 0) && ( (!(year % 100 == 0)) || (year % 400 == 0))) ? 29 : 28);
	}
	
	public static int[] daysArray(int n) {
		int[] thisArr = new int[n + 1];
		for (int i = 1; i <= n; i++) {
			thisArr[i] = 31;
			if (i == 4 || i==6 || i==9 || i==11) {
				thisArr[i] = 30;
			}
			if (i == 2) {
				thisArr[i] = 29;
			}
	   } 
	   return thisArr;
	}
	
	public static boolean isDate(int day, int month, int year) {
		int[] daysInMonth = daysArray(12);
		if (month < 1 || month > 12) {
			//alert("Please enter a valid month")
			return false;
		}
		if (
			day < 1 || day > 31 ||
			(month == 2 && day > daysInFebruary(year)) ||
			day > daysInMonth[month]
		){
			//alert("Please enter a valid day")
			return false;
		}
		return true;
	}
	
	public static boolean isDate(int day, int month, int year, int minYear, int maxYear) {
		if (!isDate(day, month, year)) {
			return false;
		}
		if (year < minYear || year > maxYear){
			//alert("Please enter a valid 4 digit year between "+minYear+" and "+maxYear)
			return false;
		}
		return true;
	}
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
D Hat Java eine Library um JavaScript auszuwerten? Allgemeine Java-Themen 2
M Javascript Hilfe bei ToDoList? Allgemeine Java-Themen 1
Ernesto95 HTTP Mit JavaScript erzeugte dynamische Webseite auslesen und nach einem Schlüsselwort durchsuchen Allgemeine Java-Themen 6
J JavaScript innerhalb eines Java Projekts ausführen Allgemeine Java-Themen 2
F Jsoup mit Javascript und onLoad Allgemeine Java-Themen 2
T javax.script (JavaScript): Nicht-JRE-Packages importieren/nutzen Allgemeine Java-Themen 4
B Visualisierter Zeitstrahl - JavaScript? Allgemeine Java-Themen 1
A NodeJs/Javascript txt.Datei einbinden Allgemeine Java-Themen 2
X Selenium - Per Webdriver, Javascript generierte links klicken Allgemeine Java-Themen 0
N Ansatz Simulation Javascript Allgemeine Java-Themen 2
P CookieManager vs Javascript Cookies - Berechtigung Allgemeine Java-Themen 7
T JavaScript put klappt nicht Allgemeine Java-Themen 6
S registermaschine & javascript Allgemeine Java-Themen 2
I Webseite auslesen (welche mittels Javascript Inhalt einbindet) Allgemeine Java-Themen 4
M GoogleMaps mit Java und JavaScript Allgemeine Java-Themen 4
L Java und Javascript um Distanz über Google Maps zu berchnen Allgemeine Java-Themen 10
J Regex: Fertige URLS aus Javascript Allgemeine Java-Themen 3
G Java in Firefox Extension (Javascript) Allgemeine Java-Themen 3
R JavaScript cruncher als Java Bibliothek Allgemeine Java-Themen 4
S Javascript & MSAccess Tabelle Allgemeine Java-Themen 5
B Java soll Datei von Javascript empfangen Allgemeine Java-Themen 4
T JavaScript aus HTML im JEditorPane ausführen? Allgemeine Java-Themen 5
R Java function die Strings escaped, sodass ich sie in Javascript verwenden kann? Allgemeine Java-Themen 4
G JavaEE und JavaScript Allgemeine Java-Themen 4
hdi Applet, JavaScript, PHP, mySQL -> Was brauch ich? Allgemeine Java-Themen 3
G PHP + Javascript vs. Java Allgemeine Java-Themen 4
T JDIC und JavaScript Allgemeine Java-Themen 3
M Komisches Javascript Problem Allgemeine Java-Themen 2
G Diagramm darstellen mit Javascript Allgemeine Java-Themen 41
I JavaScript ausführen ;) Allgemeine Java-Themen 12
R JavaScript im Browser über Java Allgemeine Java-Themen 5
G Java, JavaScript und der IE Allgemeine Java-Themen 5
OnDemand Java Deployment Vaadin Allgemeine Java-Themen 3
Zrebna Wieso sind eigentlich JUnit-Tests in src/test/java platziert - nur Konvention? Allgemeine Java-Themen 7
N LlaMA, KI, java-llama.cpp Allgemeine Java-Themen 39
V Java-Codierungsherausforderung: Navigieren durch die Macken der Datumsmanipulation Allgemeine Java-Themen 2
E Output Fehler (Java-Programm Kuchen) Allgemeine Java-Themen 11
M java: unexpected type Allgemeine Java-Themen 2
harrytut Java Input/Output Tests Junit Allgemeine Java-Themen 3
B Java Discord bot auf ein Root Server? Allgemeine Java-Themen 1
BetziTheRealOne Java PKIX path building failed as non Admin Allgemeine Java-Themen 15
D Linux, Java-Version wird nicht erkannt bzw. welche Einstellung fehlt noch? Allgemeine Java-Themen 19
KonradN Java 21 Release Allgemeine Java-Themen 5
V Umgang mit fehlenden Daten in einer Java-Datenanalyseanwendung Allgemeine Java-Themen 5
P Fehler: Hauptklasse Main konnte nicht gefunden oder geladen werden Ursache: java.lang.ClassNotFoundException: Main Allgemeine Java-Themen 24
K Java Anwendung machen Anleitung Allgemeine Java-Themen 5
G java.io.listFiles() Allgemeine Java-Themen 3
8u3631984 Frage zu Java Streams min / max Allgemeine Java-Themen 17
S Java Programm lässt sich vom USB-Stick starten, aber nicht von HDD Allgemeine Java-Themen 16
K Java-Projekt Allgemeine Java-Themen 11
K Java-Projekt Allgemeine Java-Themen 0
ruutaiokwu Welcher Browser unterstützt heutzutage noch Java Applets? Allgemeine Java-Themen 5
Jose05 Java-Klasse im extra cmd-Fenster ausführen Allgemeine Java-Themen 3
rode45e Java Threads Allgemeine Java-Themen 4
G java.io.listFiles() Allgemeine Java-Themen 2
N Java Dynamic Proxy Allgemeine Java-Themen 3
N Leichte Java Gegner Ki Allgemeine Java-Themen 10
A Java modul Problem Allgemeine Java-Themen 4
Thomasneuling Java Jar datei erstellen, von Projekt, dass auch Javafx Dateien, FXML Dateien und CSS Dateien, sowie Bilder enthält? Allgemeine Java-Themen 14
V Funktionale Schnittstelle in Java Allgemeine Java-Themen 3
OnDemand Java String in Hashmap als Key NULL Allgemeine Java-Themen 27
urmelausdemeis Exception in thread "main" java.lang.Error: Unresolved compilation problem: Allgemeine Java-Themen 7
berserkerdq2 Wenn ich bei Intelij javafx mit maven importieren will, muss ich das in die pom.xml reintun, aber warum noch in module-info.java? Allgemeine Java-Themen 3
KonradN Java 20 am 21. März Allgemeine Java-Themen 1
O Java Website Stock Bot Allgemeine Java-Themen 3
J Front-/Backend in Java Allgemeine Java-Themen 14
doopexxx JAVA Google Webcrawler Allgemeine Java-Themen 1
A Java Programm erstellen hilfe Allgemeine Java-Themen 10
G java.lang.NoClassDefFoundError: org/aspectj/lang/Signature Allgemeine Java-Themen 2
lalex1491 Java Aktienkurse nachfragen Allgemeine Java-Themen 4
J Class to link Java Allgemeine Java-Themen 4
V Wie funktioniert das Schlüsselwort "final" von Java? Allgemeine Java-Themen 19
mrStudent Inferenz JAVA Allgemeine Java-Themen 6
U URI Rechner (Java Script) Allgemeine Java-Themen 7
TheSkyRider Java Geburtsdatum Textfeld Allgemeine Java-Themen 7
mihe7 Java 19 JavaDocs: Browserintegration Allgemeine Java-Themen 0
Encera Gleichzeitiges Ausführen und verbinden von 2 Java-Klassen über die Eingabeaufforderung und Eclipse Allgemeine Java-Themen 21
H Java Rechner Programmierung der Mathematik Allgemeine Java-Themen 33
Lennox Schinkel Java Kara Auf einen Java Host laufen lassen Allgemeine Java-Themen 17
C Fußnoten von DocX mit Java Allgemeine Java-Themen 2
C Fußnoten in DocX mit Java Allgemeine Java-Themen 1
M Aussagenlogik in Java Programmieren Allgemeine Java-Themen 22
B Per Java Word Dokument schreiben? Allgemeine Java-Themen 8
krgewb Java-Bibliothek für ONVIF Allgemeine Java-Themen 1
KonradN Oracle übergibt (Java Teile der) GraalVM Community Edition an OpenJDK Community Allgemeine Java-Themen 2
Momo16 Brauche Hilfe - Java Projekt kann nicht erstellt werden Allgemeine Java-Themen 12
B Java mit command line und jars benutzen? Allgemeine Java-Themen 18
M Java Überprüfen ob .exe-Datei bereits ausgeführt wird Allgemeine Java-Themen 2
B HTTP Allgemeine Fragen über Suchmaschine nutzen mit Java Allgemeine Java-Themen 20
Mick P. F. Wie kriege ich die Fehlermeldung "java: symbol lookup error: ..." weg? Allgemeine Java-Themen 11
K Nachhilfe Java Allgemeine Java-Themen 11
KonradN Java 19 Allgemeine Java-Themen 11
F IDEA IntelliJ Java Songliste erstellen Allgemeine Java-Themen 6
TheSepp Java bestimmtes Array auf den Wert 0 setzen Allgemeine Java-Themen 32
B Java Reflection Probleme beim wehcselseitigen Referenzieren zweier Klassen/Objekte Allgemeine Java-Themen 14
Sachinbhatt Sind alle Methoden in Java implizit virtuell Allgemeine Java-Themen 2
E Java und integrierte Grafikkarten Allgemeine Java-Themen 18
Sachinbhatt Wie wird die Typumwandlung bei Mehrfachvererbung in Java implementiert? Allgemeine Java-Themen 3
Peterw73 Hilfe bei Java gesucht Allgemeine Java-Themen 3
A Java unter Win 10 Allgemeine Java-Themen 1

Ähnliche Java Themen

Neue Themen


Oben