J'essaie d'utiliser Number::Phone from CPAN pour accomplir 2 tâches:en utilisant le numéro :: téléphone pour valider le format et
- Valider un numéro de téléphone; et
- Mettre en forme le nombre en notation E.164.
Cependant, je suis incapable de comprendre comment cela fonctionne. Mon exemple de code est:
#!/usr/bin/perl -w
use strict;
use warnings;
use Number::Phone;
foreach my $fnum ('17888888', '97338888888', '00923455555333', '+97366767777' , '38383838') {
my $phone = Number::Phone->new($fnum);
my $norm = "";
eval {
$norm = $phone->format_using('E123'); # or 'Raw'
print "E164 => '$norm'\n";
} or do {
print STDERR "Unable to parse '$fnum'\n";
}
}
Sortie prévue:
E164 => '+97317888888'
E164 => '+97338888888'
E164 => '+923455555333'
E164 => '+97366767777'
E164 => '+97338383838'
Mais les résultats étaient incorrects. J'ai essayé d'utiliser Number::Phone::Normalize, mais toujours pas réussi:
#!/usr/bin/perl -w
use strict;
use warnings;
use Number::Phone::Normalize;
my %params = (
'CountryCode'=>'973',
'IntlPrefix' =>'00',
'CountryCodeOut'=>'973',
'IntlPrefixOut' => '+',
);
my $nlz = Number::Phone::Normalize->new(%params);
foreach my $number ('17888888', '97338888888', '00923455555333', '+97366767777' , '38383838') {
my $e164 = $nlz->intl($number);
print "E164 => '$e164'\n";
}
avec le même résultat attendu:
E164 => '+97317888888'
E164 => '+97338888888'
E164 => '+923455555333'
E164 => '+97366767777'
E164 => '+97338383838'
Cependant, ce produit des résultats erronés aussi. Le code Java de l'extrait ci-dessous fonctionne parfaitement, et c'est ce que j'essaie d'obtenir en Perl.
// Uses libphonenumber: http://code.google.com/p/libphonenumber/
// setenv CLASSPATH .:libphonenumber-8.5.2.jar
// libphonenumber
import com.google.i18n.phonenumbers.PhoneNumberUtil;
import com.google.i18n.phonenumbers.Phonenumber.PhoneNumber;
import com.google.i18n.phonenumbers.NumberParseException;
import com.google.i18n.phonenumbers.PhoneNumberUtil.PhoneNumberFormat;
public class ValidateList {
public static void main(String[] args) {
try {
if (args.length != 1) {
throw new IllegalArgumentException("Invalid number of arguments.");
}
String file = args[0];
PhoneNumberUtil phoneUtil = PhoneNumberUtil.getInstance();
try (java.io.BufferedReader br = new java.io.BufferedReader(new java.io.FileReader(file))) {
String line = null;
while ((line = br.readLine()) != null) {
try {
PhoneNumber phoneNumber = phoneUtil.parse(line, "BH");
boolean isValid = phoneUtil.isValidNumber(phoneNumber);
if (isValid) {
System.out.println("E164 => " + phoneUtil.format(phoneNumber, PhoneNumberFormat.E164));
}
else {
System.err.println("Invalid => " + line);
}
}
catch (NumberParseException e) {
System.err.println("NumberParseException for ("+line+"): " + e.toString());
}
}
}
}
catch (Exception e) {
System.err.println(e);
System.err.println("Usage: java ValidateList <fileNameWithPhoneNumbers>");
}
}
}
% cat input.txt
17888888
97338888888
00923455555333
+97366767777
38383838
% javac -cp libphonenumber-8.5.2.jar ValidateList.java
% java -cp .:libphonenumber-8.5.2.jar ValidateList input.txt
E164 => +97317888888
E164 => +97338888888
E164 => +923455555333
E164 => +97366767777
E164 => +97338383838
Votre entrée est grandement appréciée.
Que considérez-vous être correct? Veuillez fournir votre sortie attendue et la sortie actuelle. Les gens de Perl ici ne savent probablement pas comment lancer votre source Java, qui n'est même pas un [mcve] et ne contient aucun nombre. – simbabque
Merci @simbabque J'ai modifié mon message pour être plus complet. –
Et les gens Java ne peuvent pas répondre à votre question car il s'agit de Perl. Ne le marquez pas avec "java" si la question n'est pas * sur * java - c'est un tag non pertinent. –