williamr@2: /*
williamr@2: * Copyright (c) 2006-2009 Nokia Corporation and/or its subsidiary(-ies).
williamr@2: * All rights reserved.
williamr@2: * This component and the accompanying materials are made available
williamr@4: * under the terms of "Eclipse Public License v1.0"
williamr@2: * which accompanies this distribution, and is available
williamr@4: * at the URL "http://www.eclipse.org/legal/epl-v10.html".
williamr@2: *
williamr@2: * Initial Contributors:
williamr@2: * Nokia Corporation - initial contribution.
williamr@2: *
williamr@2: * Contributors:
williamr@2: *
williamr@2: * Description:
williamr@2: *
williamr@2: */
williamr@2: 
williamr@2: 
williamr@2: 
williamr@2: #ifndef __TULPHONENUMBERUTILS_H__
williamr@2: #define __TULPHONENUMBERUTILS_H__
williamr@2: 
williamr@2: #include    <coemain.h>
williamr@2: 
williamr@2: 
williamr@2: /**
williamr@2: Class offers static methods for parsing and validating phone numbers. 
williamr@2: Phone Parser API provides methods which are used to parse and validate
williamr@2: phone numbers. The API consists of the TulPhoneNumberUtils class.
williamr@2: 
williamr@2: Examples of valid phone numbers:
williamr@2: 1.	+358501234567
williamr@2: 2.	+358 (50) 123 4567
williamr@2: 
williamr@2: Even though both of the above examples are valid phone numbers, only 1) is 
williamr@2: accepted as a phone number by many systems. To convert 2) to 1), use the 
williamr@2: parsing method of the API.
williamr@2: 
williamr@2: Usage:
williamr@2:   
williamr@2: @code
williamr@2:  #include <tulphonenumberutils.h> 
williamr@2: 
williamr@2:  // Example shows how to use the parsing method of the API.
williamr@2: 
williamr@2:  // A number to be parsed. 
williamr@2:  TBuf<50> number1 = _L("+358 (40) 123 132");
williamr@2: 
williamr@2:  // Type of the phone number to be parsed is a regular phone number.
williamr@2:  TBool validNumber1 = 
williamr@2:  TulPhoneNumberUtils::NormalizePhoneNumber( number1,
williamr@2:                                       TulPhoneNumberUtils::EPlainPhoneNumber );
williamr@2: 
williamr@2:  // The phone number number1 is a valid regular phone number.
williamr@2:  // After parsing validNumber1 is ETrue and 
williamr@2:  // number1 is "+35840123132".
williamr@2:  // Do something like SendSMS( number1 ) etc.
williamr@2: 
williamr@2:  // A number to be parsed. 
williamr@2:  TBuf<50> number2 = _L("+358 (40) 123p132"); // note 'p'
williamr@2: 
williamr@2:  // Type of the phone number to be parsed is a regular phone number.
williamr@2:  TBool validNumber2 = 
williamr@2:  TulPhoneNumberUtils::NormalizePhoneNumber( number2,
williamr@2:                                       TulPhoneNumberUtils::EPlainPhoneNumber );
williamr@2: 
williamr@2:  // The phone number number2 is not a valid regular phone number.
williamr@2:  // After parsing validNumber2 is EFalse and 
williamr@2:  // number2 is "+358 (40) 123p132" (unchanged).
williamr@2: @endcode
williamr@2: 
williamr@2: @publishedAll
williamr@2: @released
williamr@2: */
williamr@2: NONSHARABLE_CLASS(TulPhoneNumberUtils)
williamr@2:     {
williamr@2: public:
williamr@2:     /** 
williamr@2:     * Enumeration for phone number types. 
williamr@2:     * Used to specify the type of phone numbers in methods of 
williamr@2:     * TulPhoneNumberUtils class.
williamr@2:     */
williamr@2:     enum TPhoneNumberType
williamr@2:         {
williamr@2:         /** The supplied phone number is a regular phone number. */
williamr@2:         EPlainPhoneNumber,
williamr@2:         /** The supplied phone number is a contact card number. */
williamr@2:         EContactCardNumber,
williamr@2:         /** The supplied phone number is is a phone client number. */
williamr@2:         EPhoneClientNumber,
williamr@2:         /** The supplied phone number is an SMS number. */
williamr@2:         ESMSNumber
williamr@2:         };
williamr@2: 
williamr@2:     IMPORT_C static TBool Normalize( TDes& aNumber, TPhoneNumberType aType = EPlainPhoneNumber);
williamr@2:     IMPORT_C static TBool IsValid( const TDesC& aNumber, TPhoneNumberType aType = EPlainPhoneNumber );
williamr@2: public: // deprecated
williamr@2:     inline static TBool ParsePhoneNumber( TDes& aNumber, TInt aType );
williamr@2:     inline static TBool IsValidPhoneNumber( const TDesC& aNumber, TInt aType );
williamr@2: private:    
williamr@2:     static TBool IsValidPhoneNumber( const TDesC& aNumber, const TDesC& aValidChars);
williamr@2:     static void ParseInvalidChars( TDes& aNumber, const TDesC& aInvalidChars);
williamr@2:     };
williamr@2: 
williamr@2: // For source compatibility with S60
williamr@2: 
williamr@2: /** @deprecated */
williamr@2: inline TBool TulPhoneNumberUtils::ParsePhoneNumber( TDes& aNumber, TInt aType )
williamr@2: 	{ return TulPhoneNumberUtils::Normalize(aNumber, static_cast<TPhoneNumberType>(aType)); }
williamr@2: /** @deprecated */
williamr@2: inline TBool TulPhoneNumberUtils::IsValidPhoneNumber( const TDesC& aNumber, TInt aType )
williamr@2: 	{ return TulPhoneNumberUtils::IsValid(aNumber, static_cast<TPhoneNumberType>(aType)); }
williamr@2: 	
williamr@2: #endif      // __TULPHONENUMBERUTILS_H__
williamr@2: