Prüfung ob Zeichen DIN SPEC 91379 entsprechen?

  • VB.NET
  • .NET (FX) 4.5–4.8

Es gibt 10 Antworten in diesem Thema. Der letzte Beitrag () ist von exc-jdbi.

    Prüfung ob Zeichen DIN SPEC 91379 entsprechen?

    Die DIN SPEC 91379 definiert einen Zeichenvorrat und die Transliteration. Ich muß prüfen ob eingegebener Text dem "Buchstaben-Zeichenvorrat" der DIN SPEC 91379 entspricht. Ich finde dazu im Grunde nichts, außer Infos zur Norm selbst. Das Problem müssen aber eigentlich schon tausende Leute vor mir gehabt haben. Merkwürdig..

    Gibt es in VB.net irgendeine Funktion dazu, die nur ich nicht kenne, und deshalb niemand etwas dazu sagt und fragt?
    --------
    Lieber inkompetent als inkontinent
    Du nimmst alle erlaubten Zeichen her und sagst dann:
    für jedes Zeichen im zu prüfenden Text: Wenn Nicht ErlaubterZeichensatz.Enthält(ZuPrüfendesZeichen), Dann Fehler
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    Bin mir nicht zu 100 % sicher, da ich nirgend eine exakte Liste an erlaubten Zeichen finden kann, und auch nicht herausfinden kann welches zeichen definitiv verboten ist, so da ich es auch nicht prüfen kann aber basierend auf folgender Quelle:
    xoev.de/DIN-SPEC-91379/2019-03…s/din-91379-datatypes.xsd

    würde ich es mal so versuchen:

    VB.NET-Quellcode

    1. Function checkIfDin91379conform(Value As String) As Boolean
    2. If Not String.IsNullOrEmpty(Value) AndAlso Regex.IsMatch(Value.ToString, "( |'|[,-\.]|[A-Z]|[`-z]|~|¨|´|·|[À-Ö]|[Ø-ö]|[ø-ž]|[Ƈ-ƈ]|Ə|Ɨ|[Ơ-ơ]|[Ư-ư]|Ʒ|[Ǎ-ǜ]|[Ǟ-ǟ]|[Ǣ-ǰ]|[Ǵ-ǵ]|[Ǹ-ǿ]|[Ȓ-ȓ]|[Ș-ț]|[Ȟ-ȟ]|[ȧ-ȳ]|ə|ɨ|ʒ|[ʹ-ʺ]|[ʾ-ʿ]|ˈ|ˌ|[Ḃ-ḃ]|[Ḇ-ḇ]|[Ḋ-ḑ]|[Ḝ-ḫ]|[ḯ-ḷ]|[Ḻ-ḻ]|[Ṁ-ṉ]|[Ṓ-ṛ]|[Ṟ-ṣ]|[Ṫ-ṯ]|[Ẁ-ẇ]|[Ẍ-ẗ]|ẞ|[Ạ-ỹ]|’|‡|A̋|C(̀|̄|̆|̈|̕|̣|̦|̨̆)|D̂|F(̀|̄)|G̀|H(̄|̦|̱)|J(́|̌)|K(̀|̂|̄|̇|̕|̛|̦|͟H|͟h)|L(̂|̥|̥̄|̦)|M(̀|̂|̆|̐)|N(̂|̄|̆|̦)|P(̀|̄|̕|̣)|R(̆|̥|̥̄)|S(̀|̄|̛̄|̱)|T(̀|̄|̈|̕|̛)|U̇|Z(̀|̄|̆|̈|̧)|a̋|c(̀|̄|̆|̈|̕|̣|̦|̨̆)|d̂|f(̀|̄)|g̀|h(̄|̦)|j́|k(̀|̂|̄|̇|̕|̛|̦|͟h)|l(̂|̥|̥̄|̦)|m(̀|̂|̆|̐)|n(̂|̄|̆|̦)|p(̀|̄|̕|̣)|r(̆|̥|̥̄)|s(̀|̄|̛̄|̱)|t(̀|̄|̕|̛)|u̇|z(̀|̄|̆|̈|̧)|Ç̆|Û̄|ç̆|û̄|ÿ́|Č(̕|̣)|č(̕|̣)|Ī́|ī́|Ž(̦|̧)|ž(̦|̧)|Ḳ̄|ḳ̄|Ṣ̄|ṣ̄|Ṭ̄|ṭ̄|Ạ̈|ạ̈|Ọ̈|ọ̈|Ụ(̄|̈)|ụ(̄|̈))*") = False Then
    3. Return True
    4. End If
    5. Return False
    6. End Function
    If Energy = Low Then
    Drink(aHugeCoffee)
    Else
    Drink(aHugeCoffeeToo)
    End If
    Haarspaltermodus On: Die Funktionsbenennung ist suboptimal.

    VB.NET-Quellcode

    1. If checkIfDin91379conform(MeinText) Then
    bei mir würde die Funktion lauten: TextIsDin91379conform. Dann ergibt sich:

    VB.NET-Quellcode

    1. If TextIsDin91379conform(MeinText) Then
    Liest sich m.E. besser. Oder gar als Extension erstellt und anders benannt (Overkill ;) ) :

    VB.NET-Quellcode

    1. If MeinText.IsDin91379conform() Then

    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    @VaporiZed hehe, ja ist durchaus möglich ^^ ich habs zugegebenermaßen nicht soo mit den bennennungen ^^

    @VaporiZed bin wohl etwas eingerosteter als ich wahrhaben will, aber nur für mich zur Erinnerung/Info, wie mach ich denn aus einer Funktion eine Extension ?
    If Energy = Low Then
    Drink(aHugeCoffee)
    Else
    Drink(aHugeCoffeeToo)
    End If

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „asusdk“ ()

    Erstmal vielen Dank für Eure Antworten!

    Die Variante mit der Schleife, und Zeichen für Zeichen gucken ob es erlaubt ist, hatte ich hilfsweise schon gemacht. Allerdings nicht mit dem vollständigen Zeichenvorrat der Norm. Eine Auflistung steht in der Norm, deren Doku kann man sich bei Beuth für 0,00 Euro kaufen (beuth.de/de/technische-regel/din-spec-91379/301228458).
    Meine Hoffnung war, daß die Prüfungsmöglichkeit schon irgendwie die Integration in .net geschafft hat.

    Die Regex.IsMatch Methode hatte ich mir nie näher angeschaut. Werde ich aber bei Gelegenheit tun. Die Pattern-Angabe verstehe ich nicht :(
    Nach zwei Stunden experimentieren mache ich erstmal mit meiner Behelfslösung weiter..
    --------
    Lieber inkompetent als inkontinent
    @asusdk: Modul anlegen, Extension-Attribut setzen und danach die Prozedur. Der erste Parameter gibt den zu "erweiternden" Datentyp an. Ein Beispiel unter Verwendung von Extensions ;)

    VB.NET-Quellcode

    1. Friend Module Extensions
    2. <Runtime.CompilerServices.Extension> Friend Function IsDin91379conform(Text As String) As Boolean
    3. If Text.IsEmpty Then Return True
    4. Dim LegalChars = "abc…"
    5. Return Text.All(Function(x) LegalChars.Contains(x))
    6. End Function
    7. <Runtime.CompilerServices.Extension> Friend Function IsEmpty(Text As String) As Boolean
    8. Return String.IsNullOrEmpty(Text)
    9. End Function
    10. End Module

    Wird sowas in eine DLL ausgelagert, muss man natürlich die Zugriffsmodifizierer des Moduls und der Prozeduren von Friend auf Public ändern und aus Bequemlichkeit den System.Runtime.CompilerServices.Extension-Namespace importieren, um die Schreibweise des Extension-Attributs zu kürzen. Ich mache inzwischen massiven Gebrauch von Extensions. Sie vereinfachen den Code ungemein.
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    Das, was ich meinte, was mir auf die Schnelle nicht in den Kopf will, ist dieses hier:
    "( |'|[,-\.]|[A-Z]|[`-z]|~|¨|´|·|[À-Ö]|[Ø-ö]|[ø-ž]|[Ƈ-ƈ]|Ə|Ɨ|[Ơ-ơ]|[Ư-ư]|Ʒ|[Ǎ-ǜ]|[Ǟ-ǟ]|[Ǣ-ǰ]|[Ǵ-ǵ]|[Ǹ-ǿ]|[Ȓ-ȓ]|[Ș-ț]|[Ȟ-ȟ]|[ȧ-ȳ]|ə|ɨ|ʒ|[ʹ-ʺ]|[ʾ-ʿ]|ˈ|ˌ|[Ḃ-ḃ]|[Ḇ-ḇ]|[Ḋ-ḑ]|[Ḝ-ḫ]|[ḯ-ḷ]|[Ḻ-ḻ]|[Ṁ-ṉ]|[Ṓ-ṛ]|[Ṟ-ṣ]|[Ṫ-ṯ]|[Ẁ-ẇ]|[Ẍ-ẗ]|ẞ|[Ạ-ỹ]|’|‡|A̋|C(̀|̄|̆|̈|̕|̣|̦|̨̆)|D̂|F(̀|̄)|G̀|H(̄|̦|̱)|J(́|̌)|K(̀|̂|̄|̇|̕|̛|̦|͟H|͟h)|L(̂|̥|̥̄|̦)|M(̀|̂|̆|̐)|N(̂|̄|̆|̦)|P(̀|̄|̕|̣)|R(̆|̥|̥̄)|S(̀|̄|̛̄|̱)|T(̀|̄|̈|̕|̛)|U̇|Z(̀|̄|̆|̈|̧)|a̋|c(̀|̄|̆|̈|̕|̣|̦|̨̆)|d̂|f(̀|̄)|g̀|h(̄|̦)|j́|k(̀|̂|̄|̇|̕|̛|̦|͟h)|l(̂|̥|̥̄|̦)|m(̀|̂|̆|̐)|n(̂|̄|̆|̦)|p(̀|̄|̕|̣)|r(̆|̥|̥̄)|s(̀|̄|̛̄|̱)|t(̀|̄|̕|̛)|u̇|z(̀|̄|̆|̈|̧)|Ç̆|Û̄|ç̆|û̄|ÿ́|Č(̕|̣)|č(̕|̣)|Ī́|ī́|Ž(̦|̧)|ž(̦|̧)|Ḳ̄|ḳ̄|Ṣ̄|ṣ̄|Ṭ̄|ṭ̄|Ạ̈|ạ̈|Ọ̈|ọ̈|Ụ(̄|̈)|ụ(̄|̈))*"

    Habe damit herumexperimentiert. Man scheint tolle Sachen damit machen zu können, aber ich verstehe es halt gerade nicht.

    <HUMOR>Bislang dachte ich, Java und C++ Code würde Augenkrebs verursachen können, aber das hier toppt alles ;)</HUMOR>
    --------
    Lieber inkompetent als inkontinent
    naja, genau dieses "patern" war so in der Quelle hinterlegt, die ich oben verlinkt habe, und verwendet dann, RegularExpressions, das ist an sich schon eine Welt für sich ^^

    Das Gleiche könnte man auch machen, wenn man einen String mit allen erlaubten Zeichen hätte. Aber leider habe ich selbst auf der DIN-Seite nur ein Dokument finden können in welchem sich über gefühlt 50 Seiten, nur Tabellen erstrecken, und ein Zeichen pro Zeile enthält, bis man sich daraus alle Zeichen notiert hat, stirbt man eher an Altersschwäche ^^

    Hab auf deine Frage hin kanpp 3 Stunden lang, die gute Mrs. Google gequält, da mich die Lösung auch interessiert hätte, aber konnte nichts finden was hier direkt weiterhelfen würde

    Nachtrag: Ich kann mich erinnern das @ErfinderDesRades mal ein Programm geschrieben hat, in dem man mit den RegularExpressions rumspielen kann, und wo er auch einiges dazu erklärt, ist ein guter Anfang wenn du damit rumspielen magst: Regextester-OpenSource
    If Energy = Low Then
    Drink(aHugeCoffee)
    Else
    Drink(aHugeCoffeeToo)
    End If

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „asusdk“ ()

    Nur die Buchstaben sind (es fehlen ca. 10-20 Stück) diese:

    Private Const DINSPEC91379 As String = "Aaa̋ÀÁÂÃàáâãĀāĂ㥹ǍǎȧẠẠ̈ạạ̈ẢảẤấẦầẨẩẪẫẬậẮắẰằẲẳẴẵẶặ" & "ÄÆäæǞǟǢǣǼǽ" & "ÅåǺǻ" & "BbḂḃḆḇ" & "C~C̕C̣C̦̆C̨c̀cc̄c̆c̈c̕c̣c̦̆c̨ÇÇ}çç̆ĆćĈĉĊċČČ̕Č̣čč̕č̣Ƈƈ" & "D”dd”ÐðĎďĐđḊḋḌḍḎḏḐḑ" & "EeÈÉÊËèéêëĒēĔĕĖėĘęĚěƏȨȩəḜḝẸẹẺẻẼẽẾếỀềỂểỄễỆệ" & "FfḞḟ" & "Ggg̀ĜĝĞğĠġĢģǤǥǦǧǴǵḠḡ" & "Hhh̦ĤĥĦħȞȟḢḣḤḥḦḧḨḩḪḫẖ" & "IiÌÍÎÏìíîïĨĩĪĪīī́ĬĭĮįİıƗǏǐɨḯỈỉỊị" & "IJij" & "Jjȷ́Ĵĵǰ" & "KK̕K̛K̦kk̛k̦ĶķĸǨǩḰḱḲḲ̄ḳḳ̄Ḵḵ" & "K͟HK͟hk͟h" & "L”L̥̄L̥L̦Ll”l̥̄l̥l̦lĹĺĻļĽľĿŀŁłḶḷḺḻ" & "MCmm̀m̂m̆m̐ṀṁṂṃ" & "NN̦nn̂n̄n̆n̦ÑñŃńŅņŇňʼnŊŋǸǹṄṅṆṇṈṉ" & "OoÒÓÔÕòóôõŌōŎŏŐőƠơǑǒǪǫǬǭȬȭȮȯȰȱṒṓỌỌ̈ọọ̈ỎỏỐốỒồỔổỖỗỘộỚớỜờỞởỠỡỢợ" & "ÖØöøOEoeǾǿȪȫ" & "PP̕P̣pp̀p̄p̕p̣ṔṕṖṗ" & "Qq" & "RR̥̄R̥Rr̆r̥̄r̥rŔŕŖŗŘřȒȓṘṙṚṛṞṟ" & "SSS̛̱Ss̀s̄ss̛̱sŚśŜŝŞşŠšȘșṠṡṢ̄Ṣṣ̄" & "ßẞ" & "TT̕T̛tt̀t̄t̕t̛ŢţŤťŦŧȚțṪṫṬṬ̄ṭṭ̄Ṯṯẗ" & "Þþ" & "Uuu̇ÙÚÛÛùúûû̄ŨũŪūŬŭŮůŰűŲųƯưǓǔỤỤ̄Ụ̈ụụ̄ụ̈ỦủỨứỪừỬửỮữỰự" & "ÜüǕǖǗǘǙǚǛǜ" & "Vv" & "WwŴŵẀẁẂẃẄẅẆẇ" & "XxẌẍ" & "YyÝýÿÿ́ŶŷŸȲȳẎẏỲỳỴỵỶỷỸỹ" & "Zzz̀z̄z̆z̈z̧ŹźŻżŽŽ̦Ž̧žž̦ž̧ƷǮǯʒẐẑẒẓẔẕ"

    Ich mache es auch so, daß ich in diesem String suche. Geht ja auch erstmal.
    --------
    Lieber inkompetent als inkontinent
    Auf die von @asusdk erwähnte Seite gibts noch ne Zip-Datei mit allen Zeichen und UniCode-Nummern. Sogar als Excel-Datei. Vielleicht hilft das auch noch ein wenig.

    xoev.de/downloads-2316#StringLatin
    xoev.de/sixcms/media.php/13/StringLatin 12.zip

    Freundliche Grüsse

    exc-jdbi