-
Notifications
You must be signed in to change notification settings - Fork 0
/
Telefonnummern.groovy
97 lines (74 loc) · 3.62 KB
/
Telefonnummern.groovy
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
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
#!/bin/env groovy
/*
(c) 2016 Th. Donath
Telefonnummern in verschiedenen Systemen sollen verglichen werden.
Da es keinen sicheren Algorithmus gibt, Zeichenketten in irgendeiner Form zu einer Telefonnummer zu formatieren
(die Bestandteile Landes-/Ortsvorwahl können nicht zuverlässig identifiziert werden)
werden die Zeichenketten soweit möglich normiert (Trennzeichen entfernen) und ggf. Landes- und/oder Ortsvorwahl ergänzt.
Das Normieren/Expandieren realisiert die Funktion "normieren" - auf die kommt es an; kann leicht in finale Implementierung übertragen werden.
In Groovy, weil einfach zu testen - die Testcases siehe unten...
*/
println "\nTelefonnummern vergleichen\n"
class Test {
boolean vergleichen(String lokalLand, String lokalOrt, String nummer1, String nummer2) {
def normieren = {String nummer ->
def String n = nummer
n = n.replaceAll(/^ */, '')
// Durchwahl normieren
n = n.replaceAll(/ *-* *\(0\) *$/, '0')
// Landesvorwahl enthalten? Dann ist automatisch auch die Ortsvorwahl enthalten
// kann nicht sicher getrennt werden, da auch Landesvorwahlen eine Null enthalten können)
// eventuell eingeschlossene (0) - die ist zu entfernen
if (n ==~ /^00.*|^\++.*/) {
n = '+' + n.replaceAll(/^00|^\++/) {m -> ""}
n = n.replaceAll(/\(0\)/, '')
}
else {
// Ortsvorwahl enthalten? startet mit 0
if (n ==~ /^0.*/) {
n = lokalLand + n.replaceAll(/^0/, '')
}
else {
n = lokalLand + lokalOrt + n
}
}
// abschliessend alle Füller (Space, -, /) entfernen
n = n.replaceAll(' ', '')
n = n.replaceAll('-', '')
n = n.replaceAll('/', '')
//println "final string:" + n
return n
}
return normieren(nummer1) == normieren(nummer2)
}
}
def Test test = new Test()
assert test.vergleichen('+49', '40', '85390', ' 85390 ')
assert test.vergleichen('+49', '40', '85390', '85390')
assert test.vergleichen('+49', '40', '85390', '8539 0')
assert test.vergleichen('+49', '40', '85390', '8539-0')
assert test.vergleichen('+49', '40', '85390', '8539/0')
assert test.vergleichen('+49', '40', '85390', '8539(0)')
assert test.vergleichen('+49', '40', '85390', '8539 (0)')
assert test.vergleichen('+49', '40', '85390', '8539-(0)')
assert test.vergleichen('+49', '40', '85390', '0408539-0')
assert test.vergleichen('+49', '40', '85390', '040 8539-0')
assert test.vergleichen('+49', '40', '85390', '040-8539-0')
assert test.vergleichen('+49', '40', '85390', '040/8539-0')
assert test.vergleichen('+49', '40', '85390', '+4940-8539-0')
assert test.vergleichen('+49', '40', '85390', '+49 40-8539-0')
assert test.vergleichen('+49', '40', '85390', '+49-40-8539-0')
assert test.vergleichen('+49', '40', '85390', '+49/40-8539-0')
assert test.vergleichen('+49', '40', '85390', '+49(0)40-8539-0')
assert test.vergleichen('+49', '40', '85390', '++4940-8539-0')
assert test.vergleichen('+49', '40', '85390', '++49 40-8539-0')
assert test.vergleichen('+49', '40', '85390', '++49-40-8539-0')
assert test.vergleichen('+49', '40', '85390', '++49/40-8539-0')
assert test.vergleichen('+49', '40', '85390', '004940-8539-0')
assert test.vergleichen('+49', '40', '85390', '0049 40-8539-0')
assert test.vergleichen('+49', '40', '85390', '0049-40-8539-0')
assert test.vergleichen('+49', '40', '85390', '0049/40-8539-0')
assert !test.vergleichen('+49', '40', '85390', '085390')
assert !test.vergleichen('+49', '40', '85390', '0049040-8539-0')
assert test.vergleichen('+49', '40', ' 0170-7654790', '+49 (0)170-7654790')
println "\nall Tests succeeded\n"