Russische und Arabische Zeichen Topic is solved

Stelle Fragen zur Programmierung mit Autohotkey

Moderator: jNizM

User avatar
glnklein
Posts: 127
Joined: 23 Oct 2020, 04:26

Russische und Arabische Zeichen

30 May 2021, 08:38

hallo,

gibt es eine Möglichkeit das AHK erkennt um welche Zeichen es sich handelt , ich möchte nur normale Buchstaben und zahlen zulassen und keine z.b

Russischen
это тест, чтобы узнать, знает ли ahk и этот текст

oder Arabischen Zeichen
هذا اختبار لمعرفة ما إذا كان ahk يعرف هذا النص أيضًا
habe leider keinen Ansatz gefunden den ich in einen Code umwandeln könnte.
:D verwende AutoHotkey104805 :D ------------------------UPDATE auf ..1.1.33.02 erfolgreich , jetzt kommen neue Probleme :lolno:
garry
Posts: 3795
Joined: 22 Dec 2013, 12:50

Re: Russische und Arabischen Zeichen

30 May 2021, 10:52

Beispiel

Code: Select all

f1=%a_scriptdir%\test55.txt
ifexist,%f1%
  filedelete,%f1%
aa:="Aus    dem   Russischen это тест, чтобы узнать, знает ли ahk и этот текст oder Arabischen Zeichen هذا اختبار لمعرفة ما إذا كان ahk يعرف هذا النص أيضً and <>:""/\\|?* [keep]   Küche Bär Möwe     KÜCHE BÄR MÖWE  ENDE . "
aa1:=RegExReplace(aa, "[^a-zäöüÜÖÄA-Z0-9 ]", "")
aax:=RegExReplace(aa1,"\x20{2,}"," ")      ;- keep only one space
fileappend,%aax%,%f1%,utf-8
try
run,%f1%
exitapp

;-Aus dem Russischen ahk oder Arabischen Zeichen ahk and keep Küche Bär Möwe KÜCHE BÄR MÖWE ENDE 
Beispiel-2
Geeignet für Filename , behalte Unicode aber entferne Zeichen welche für Filename nicht erlaubt sind

Code: Select all

f1=%a_scriptdir%\filename.txt
ifexist,%f1%
  filedelete,%f1%
aa:="Aus    dem   Russischen это тест, чтобы узнать, знает ли ahk и этот текст oder Arabischen Zeichen هذا اختبار لمعرفة ما إذا كان ahk يعرف هذا النص أيضً and <>:""/\\|?* [keep]   Küche Bär Möwe     KÜCHE BÄR MÖWE  ENDE . "
;-- USE this for filename
aa1:=RegExReplace(aa, "(*UCP)[^\w\s]")     ;- user Rohwedder: remove special characters and keep unicode
aax:=RegExReplace(aa1,"\x20{2,}"," ")      ;- keep only one space
aax=%aax%
filename=%aax%.xyz
fileappend,%filename%,%f1%,utf-8
try
run,%f1%
exitapp
;- Aus dem Russischen это тест чтобы узнать знает ли ahk и этот текст oder Arabischen Zeichen هذا اختبار لمعرفة ما إذا كان ahk يعرف هذا النص أيض and keep Küche Bär Möwe KÜCHE BÄR MÖWE ENDE.xyz
User avatar
glnklein
Posts: 127
Joined: 23 Oct 2020, 04:26

Re: Russische und Arabischen Zeichen

30 May 2021, 13:05

danke , gibt es auch einen weg das ahk erkennt ob irgend welche Russischen oder Arabischen Zeichen enthalten sind ,alle Zeichen die verboten sind auszuschließen währe wohl eher unmöglich da es ja noch mehr sprachen gibt mit nicht Lateinischen Zeichen
:D verwende AutoHotkey104805 :D ------------------------UPDATE auf ..1.1.33.02 erfolgreich , jetzt kommen neue Probleme :lolno:
garry
Posts: 3795
Joined: 22 Dec 2013, 12:50

Re: Russische und Arabischen Zeichen

30 May 2021, 14:20

@glnklein verstehe Frage nicht ganz , kyrillisch und arabisch ausschliessen , singhalesisch erlauben ( ? )
Es gibt noch viele spezial Buchstaben ( lateinischen Buchstaben ähnlich ) ( dänisch, norvegisch, albanisch , romanisch, polnisch, isländisch , friesisch , französisch , spanisch , portugiesisch, tschechisch , vietnamesisch , estnisch , lettisch ... etc )
in Beispiel-1 lediglich ä ö ü ... zu 0-9 A-Z a-z angefügt
User avatar
LuckyJoe
Posts: 343
Joined: 02 Oct 2013, 09:52

Re: Russische und Arabischen Zeichen

31 May 2021, 05:39

Die Unicode Zeichentabelle umfasst ca. 120.000 Zeichen, die die unterschiedlichen Sprachen und Symbole in festgelegte Bereiche unterteilt. Darüber sollten sich Bereiche ein- oder ausschließen lassen (https://unicode-table.com/de/).
Herzliche Grüße aus dem Rheinland
Lucky Joe
User avatar
glnklein
Posts: 127
Joined: 23 Oct 2020, 04:26

Re: Russische und Arabischen Zeichen  Topic is solved

02 Jun 2021, 06:54

Danke an alle die geholfen haben , bin leider erst heute dazu gekommen etwas passendes mir zurecht zu basteln .

Der Code von garry hatte für mich die Lösung, so konnte ich mir eine Funktion daraus basteln .


Code: Select all


eingabe :="فهذاانصيض"			;Arabisch
;eingabe :="苦苦掙扎"			;China
;eingabe :="и этот текст"			;Russisch
;eingabe :="dasistdeutsch"			;Deutsch


clean(eingabe)

if (eingabe != ergebnisvariable)
	msgbox , Text %eingabe% enthält verbotene Zeichen


return
clean(text)
{
		Global ergebnisvariable
 		text1:=RegExReplace(text, "[^a-zäöüÜÖÄA-Z0-9 ]", "")
		ergebnisvariable:=RegExReplace(text1,"\x20{2,}"," ")      ;- keep only one space
		
	
}
:D verwende AutoHotkey104805 :D ------------------------UPDATE auf ..1.1.33.02 erfolgreich , jetzt kommen neue Probleme :lolno:
effel
Posts: 555
Joined: 16 Jan 2018, 13:34

Re: Russische und Arabischen Zeichen

02 Jun 2021, 10:08

Code: Select all

	msgbox,% IsValid("فهذاانصيض")
	msgbox,% IsValid("苦苦掙扎")
	msgbox,% IsValid("и этот текст")
	msgbox,% IsValid("dasistdeutsch")
return

IsValid(text)
{
;		Global ergebnisvariable
 		text1:=RegExReplace(text, "[^a-zäöüÜÖÄA-Z0-9 ]", "")
		ergebnisvariable:=RegExReplace(text1,"\x20{2,}"," ")      ;- keep only one space
		Return (ergebnisvariable?1:0)
}
garry
Posts: 3795
Joined: 22 Dec 2013, 12:50

Re: Russische und Arabische Zeichen

03 Jun 2021, 08:23

danke für die Beispiele und Lösungen
@LuckyJoe danke für die Unicode Zeichen Tabelle link
@effel verstehe nicht wieso ich für russisch und deutsch den gleichen Wert erhalte ( 1 )
ich benütze um Datei abzuspeichern ( z.B. bei Youtube ) den script von Rohwedder ( Beispiel-2 ) > RegExReplace(aa, "(*UCP)[^\w\s]") ;- remove special characters and keep unicode /
u.a. damit z.B. aus cançâo > nicht cano wird ( zum regex Beispiel-1 könnte man sonst noch einige Zeichen anfügen )
effel
Posts: 555
Joined: 16 Jan 2018, 13:34

Re: Russische und Arabische Zeichen

03 Jun 2021, 10:00

garry wrote:
03 Jun 2021, 08:23

Hallo Garry, danke für den Hinweis, ich wollte nur die Frage 'enthältverboteneZeichen' mit einem logischen True oder False beantworten,

manchmal lese ich einfach zu schnell :oops:
just me
Posts: 9576
Joined: 02 Oct 2013, 08:51
Location: Germany

Re: Russische und Arabische Zeichen

05 Jun 2021, 04:25

Moin @glnklein,

die Idee mit der Funktion ist gut, die Umsetzung gefällt mir aber nicht.

Funktionen nutzt man üblicherweise, um einen vom übrigen Skript abgekapselten Codeblock auszuführen, dem Eingabeparameter übergeben werden (können) und der 'normalerweise' einen Wert zurückliefert. Die Verwendung 'globaler' Variablen sollte auf das Notwendige beschränkt werden. Seit AHK Funktionen auch Objekte zurückliefern können, sind sie noch seltener 'notwendig'.

Deine Funktion sollte deshalb eher so aussehen:

Code: Select all

Clean(Text)
{
   Return RegExReplace(RegExReplace(Text, "[^a-zäöüÜÖÄA-Z0-9 ]", ""), "\x20{2,}", " ")
}
In Deinem Fall kommt es auch darauf an, ob Du die 'Ausgabe' in ergebnisvariable dauerhaft brauchst.

Code: Select all

; wenn ja
Ergebnisvariable := Clean(Eingabe)
If (Eingabe != Ergebnisvariable)
   MsgBox , Text %Eingabe% enthält verbotene Zeichen
; wenn nein
If (Eingabe != Clean(Eingabe))
	MsgBox , Text %Eingabe% enthält verbotene Zeichen
Und wenn Dir eine reine Prüfung mit Ja/Nein Rückgabe ausreicht, solltest Du Dir @effels Konzept anschauen:

Code: Select all

IsValid(Text)
{
   Return (Text == RegExReplace(RegExReplace(Text, "[^a-zäöüÜÖÄA-Z0-9 ]", ""), "\x20{2,}", " "))
}

Und zum Schluss: Was ist mit dem berühmten deutschen Buchstaben ß?
User avatar
glnklein
Posts: 127
Joined: 23 Oct 2020, 04:26

Re: Russische und Arabische Zeichen

05 Jun 2021, 04:54

just me wrote:
05 Jun 2021, 04:25
Moin @glnklein,

die Idee mit der Funktion ist gut, die Umsetzung gefällt mir aber nicht.

Funktionen nutzt man üblicherweise, um einen vom übrigen Skript abgekapselten Codeblock auszuführen, dem Eingabeparameter übergeben werden (können) und der 'normalerweise' einen Wert zurückliefert. Die Verwendung 'globaler' Variablen sollte auf das Notwendige beschränkt werden. Seit AHK Funktionen auch Objekte zurückliefern können, sind sie noch seltener 'notwendig'.

Deine Funktion sollte deshalb eher so aussehen:

Code: Select all

Clean(Text)
{
   Return RegExReplace(RegExReplace(Text, "[^a-zäöüÜÖÄA-Z0-9 ]", ""), "\x20{2,}", " ")
}
In Deinem Fall kommt es auch darauf an, ob Du die 'Ausgabe' in ergebnisvariable dauerhaft brauchst.

Code: Select all

; wenn ja
Ergebnisvariable := Clean(Eingabe)
If (Eingabe != Ergebnisvariable)
   MsgBox , Text %Eingabe% enthält verbotene Zeichen
; wenn nein
If (Eingabe != Clean(Eingabe))
	MsgBox , Text %Eingabe% enthält verbotene Zeichen
Und wenn Dir eine reine Prüfung mit Ja/Nein Rückgabe ausreicht, solltest Du Dir @effels Konzept anschauen:

Code: Select all

IsValid(Text)
{
   Return (Text == RegExReplace(RegExReplace(Text, "[^a-zäöüÜÖÄA-Z0-9 ]", ""), "\x20{2,}", " "))
}

Und zum Schluss: Was ist mit dem berühmten deutschen Buchstaben ß?
Danke für die Hinweise , im eigentlichen geht es mir nur um die nicht Lateinischen Schriftzeichen von ausländischen Schriften wie z.b Russisch.

Die Ergebnisvariable benötige ich eigentlich nur immer kurz da es sich um eine Registrierung eines Account handelt der nur "normale Zeichen" akzeptiert im Usernamen.
Ich hatte die 'globaler' Variablen verwendet damit ich das Ergebnis per if abfrage außerhalb der Funktion nutzen kann .

zum Schluss ß braucht keiner :-)
:D verwende AutoHotkey104805 :D ------------------------UPDATE auf ..1.1.33.02 erfolgreich , jetzt kommen neue Probleme :lolno:
effel
Posts: 555
Joined: 16 Jan 2018, 13:34

Re: Russische und Arabische Zeichen

05 Jun 2021, 05:39

glnklein wrote:
05 Jun 2021, 04:54
hallo @glnklein

vielleicht wäre es sinnvoll den AccountNamen mit einem Hash zu erzeugen, damit kannst du evt. Fehler bei der Registrierung vermeiden. Wenn du den Namen einfach zur um die nicht erlaubten Zeichen kürzt, kommen unter Umständen öfter doppelte vor...

Folgender Code zeigt ein Beispiel

Ergebnis
#1 = 8dff315fd24996c0e0e6f904c206946c
#2 = e01036b96086200f00d5bd3189d6519f
#3 = 6f1c56857b7e8b3b4bdcf70eb295664f

Code: Select all

; credits gibts keine, ich weiss nicht mehr wo ich den code gefunden habe, aber DANKE an den entwickler :-)
account#1 := bcrypt_md5("Dies ist ein Test, um zu sehen, ob ahk diesen Text kennt")
account#2 := bcrypt_md5("Это тест, чтобы узнать, знает ли ahk этот текст")
account#3 := bcrypt_md5("هذا اختبار لمعرفة ما إذا كان ahk يعرف هذا النص أيضًا")

MsgBox % clipboard := account#1 "`n" account#2  "`n" account#3 

bcrypt_md5(string, encoding := "utf-8")
{
    static BCRYPT_MD5_ALGORITHM := "MD5"
    static BCRYPT_OBJECT_LENGTH := "ObjectLength"
    static BCRYPT_HASH_LENGTH   := "HashDigestLength"

	try
	{
		; loads the specified module into the address space of the calling process
		if !(hBCRYPT := DllCall("LoadLibrary", "str", "bcrypt.dll", "ptr"))
			throw Exception("Failed to load bcrypt.dll", -1)

		; open an algorithm handle
		if (NT_STATUS := DllCall("bcrypt\BCryptOpenAlgorithmProvider", "ptr*", hAlg, "ptr", &BCRYPT_MD5_ALGORITHM, "ptr", 0, "uint", 0) != 0)
			throw Exception("BCryptOpenAlgorithmProvider: " NT_STATUS, -1)

		; calculate the size of the buffer to hold the hash object
		if (NT_STATUS := DllCall("bcrypt\BCryptGetProperty", "ptr", hAlg, "ptr", &BCRYPT_OBJECT_LENGTH, "uint*", cbHashObject, "uint", 4, "uint*", cbData, "uint", 0) != 0)
			throw Exception("BCryptGetProperty: " NT_STATUS, -1)

		; allocate the hash object
		VarSetCapacity(pbHashObject, cbHashObject, 0)
		;	throw Exception("Memory allocation failed", -1)

		; calculate the length of the hash
		if (NT_STATUS := DllCall("bcrypt\BCryptGetProperty", "ptr", hAlg, "ptr", &BCRYPT_HASH_LENGTH, "uint*", cbHash, "uint", 4, "uint*", cbData, "uint", 0) != 0)
			throw Exception("BCryptGetProperty: " NT_STATUS, -1)

		; allocate the hash buffer
		VarSetCapacity(pbHash, cbHash, 0)
		;	throw Exception("Memory allocation failed", -1)

		; create a hash
		if (NT_STATUS := DllCall("bcrypt\BCryptCreateHash", "ptr", hAlg, "ptr*", hHash, "ptr", &pbHashObject, "uint", cbHashObject, "ptr", 0, "uint", 0, "uint", 0) != 0)
			throw Exception("BCryptCreateHash: " NT_STATUS, -1)

		; hash some data
		VarSetCapacity(pbInput, (StrPut(string, encoding) - 1) * ((encoding = "utf-16" || encoding = "cp1200") ? 2 : 1), 0) && cbInput := StrPut(string, &pbInput, encoding) - 1
		if (NT_STATUS := DllCall("bcrypt\BCryptHashData", "ptr", hHash, "ptr", &pbInput, "uint", cbInput, "uint", 0) != 0)
			throw Exception("BCryptHashData: " NT_STATUS, -1)

		; close the hash
		if (NT_STATUS := DllCall("bcrypt\BCryptFinishHash", "ptr", hHash, "ptr", &pbHash, "uint", cbHash, "uint", 0) != 0)
			throw Exception("BCryptFinishHash: " NT_STATUS, -1)

		loop % cbHash
			hash .= Format("{:02x}", NumGet(pbHash, A_Index - 1, "uchar"))
	}
	catch exception
	{
		; represents errors that occur during application execution
		throw Exception
	}
	finally
	{
		; cleaning up resources
		if (pbInput)
			VarSetCapacity(pbInput, 0)
		if (hHash)
			DllCall("bcrypt\BCryptDestroyHash", "ptr", hHash)
		if (pbHash)
			VarSetCapacity(pbHash, 0)
		if (pbHashObject)
			VarSetCapacity(pbHashObject, 0)
		if (hAlg)
			DllCall("bcrypt\BCryptCloseAlgorithmProvider", "ptr", hAlg, "uint", 0)
		if (hBCRYPT)
			DllCall("FreeLibrary", "ptr", hBCRYPT)
	}

	return hash
}
User avatar
glnklein
Posts: 127
Joined: 23 Oct 2020, 04:26

Re: Russische und Arabische Zeichen

05 Jun 2021, 08:25

@effel

die Idee ist super aber wie bekomme ich den hash dann wieder in Klartext umgewandelt ,und zwar nicht nur mit ahk sondern mit php ?
:D verwende AutoHotkey104805 :D ------------------------UPDATE auf ..1.1.33.02 erfolgreich , jetzt kommen neue Probleme :lolno:
effel
Posts: 555
Joined: 16 Jan 2018, 13:34

Re: Russische und Arabische Zeichen

05 Jun 2021, 08:38

glnklein wrote:
05 Jun 2021, 08:25
...nicht nur mit ahk sondern mit php ?...
ich kenne mich mit php nicht so toll aus, aber wenn du die Anwendung schreibst, könntest Du den vom Benutzer eingegebenen Namen ja auch weiterhin verwenden und dazu abspeichern, den md5 sieht der Anwender garnicht.
User avatar
glnklein
Posts: 127
Joined: 23 Oct 2020, 04:26

Re: Russische und Arabische Zeichen

05 Jun 2021, 08:47

@effect

kann man den in ahk md5 wieder zu klartext machen , in php währe es dann nicht nötig da es da eine Funktion gibt um md5 zu vergleichen
:D verwende AutoHotkey104805 :D ------------------------UPDATE auf ..1.1.33.02 erfolgreich , jetzt kommen neue Probleme :lolno:
effel
Posts: 555
Joined: 16 Jan 2018, 13:34

Re: Russische und Arabische Zeichen

05 Jun 2021, 08:54

das geht leider nicht
User avatar
glnklein
Posts: 127
Joined: 23 Oct 2020, 04:26

Re: Russische und Arabische Zeichen

05 Jun 2021, 10:57

effel wrote:
05 Jun 2021, 08:54
das geht leider nicht
schade mal sehen ob ich es trotzdem irgendwie mit einbauen kann
:D verwende AutoHotkey104805 :D ------------------------UPDATE auf ..1.1.33.02 erfolgreich , jetzt kommen neue Probleme :lolno:
chrisreiter

Re: Russische und Arabische Zeichen

02 Aug 2022, 08:02

die als korrekt markierte Lösung ist leider schlecht!

( ... text1:= RegExReplace(text, "[^a-zäöüÜÖÄA-Z0-9 ]", "") ...)

Durch diesen Ansatz musst Du alle zulässigen Zeichen angeben...hier fehlt mir schon mal das scharfe ß, Bindestrich, Hochkommata, Komma, accents etc.....

Ich glaube, was Deinem vorhaben am nächsten kommt, wäre den ASCII Zeichensatz zuzulassen, alles andere nicht. LG

Return to “Ich brauche Hilfe”

Who is online

Users browsing this forum: No registered users and 46 guests