const MINIMUM_PHONE_NUMBER_LENGTH = 9;
const PHONE_OK = 0;
const PHONE_ERROR_EMPTY_PHONE = 1;
const PHONE_ERROR_INVALID_CHARS = 2;
const PHONE_ERROR_PHONE_SHORT_LENGTH = 3;
const PHONE_ERROR_PHONE_IS_FICTIVE = 4;
function IsPhoneTextNumber(str)
{
var result = (str != null);
result = result && (str.length != 0);
result = result && (str.match(/[0-9]/i));
return result;
}
function GetFixedPhoneNumber(phone_number)
{
var result = "";
if (phone_number) {
for (var i = 0; i < phone_number.length; i++) {
if (IsPhoneTextNumber(phone_number.charAt(i))) {
result += phone_number.charAt(i);
}
}
}
return result;
}
function CheckPhoneEmpty(phone_number)
{
var result = (phone_number != null);
if (result) {
phone_number = phone_number.trim();
result = result && (phone_number.length > 0);
}
return result;
}
function CheckPhoneChars(phone_number)
{
if (phone_number) {
var phone_regex = /^[0-9\+\-\ \(\)]+$/;
if (phone_regex.test(phone_number)) {
return true;
}
}
return false;
}
function CheckPhoneLength(phone_number)
{
phone_number = GetFixedPhoneNumber(phone_number);
if (phone_number) {
return (phone_number.length >= MINIMUM_PHONE_NUMBER_LENGTH);
}
return false;
}
function IsStringFilledWithDigit(phone, digit)
{
phone = phone.split(digit).join('');
return (phone.length == 0);
}
function IsPhoneFilledBySingleDigit(phone)
{
for (var i = 0; i <= 9; i++)
{
if (IsStringFilledWithDigit(phone, i))
return true;
}
return false;
}
function CheckFictivePhoneNumber(phone)
{
phone = GetFixedPhoneNumber(phone);
var result = (!IsPhoneFilledBySingleDigit(phone));
return result;
}
function ValidatePhoneNumber(phone_number)
{
phone_number = phone_number || "";
phone_number = phone_number.trim();
if (!CheckPhoneEmpty(phone_number))
return PHONE_ERROR_EMPTY_PHONE;
if (!CheckPhoneChars(phone_number))
return PHONE_ERROR_INVALID_CHARS;
if (!CheckPhoneLength(phone_number))
return PHONE_ERROR_PHONE_SHORT_LENGTH;
if (!CheckFictivePhoneNumber(phone_number))
return PHONE_ERROR_PHONE_IS_FICTIVE;
return PHONE_OK;
}
function PhoneValidationStatusToDescription(status)
{
switch (status)
{
case PHONE_OK: return "OK";
case PHONE_ERROR_EMPTY_PHONE: return "Die Rufnummer darf nicht leer sein";
case PHONE_ERROR_INVALID_CHARS: return "Rufnummer enthält ungültige Zeichen";
case PHONE_ERROR_PHONE_IS_FICTIVE: return "Eine Telefonnummer kann nicht aus einer einzigen Ziffer bestehen.";
case PHONE_ERROR_PHONE_SHORT_LENGTH: return "Die Rufnummer ist zu kurz";
}
return "Unbekannter Fehler";
}
function IsValidPhoneNumber(phone_number)
{
var phone_validate_result = ValidatePhoneNumber(phone_number);
return (phone_validate_result == PHONE_OK);
}