Dans le code suivant, j'essaie de faire en sorte que le résultat soit le formatage différent des numéros de téléphone et qu'il soit valide ou non. J'ai tout compris, sauf le code Java Regular Expression de la ligne 11 du modèle de chaîne.
import Java.util.regex.*;
public class MatchPhoneNumbers {
public static void main(String[] args) {
String[] testStrings = {
/* Following are valid phone number examples */
"(123)4567890", "1234567890", "123-456-7890", "(123)456-7890",
/* Following are invalid phone numbers */
"(1234567890)","123)4567890", "12345678901", "(1)234567890",
"(123)-4567890", "1", "12-3456-7890", "123-4567", "Hello world"};
// TODO: Modify the following line. Use your regular expression here
String pattern = "^/d(?:-/d{3}){3}/d$";
// current pattern recognizes any string of digits
// Apply regular expression to each test string
for(String inputString : testStrings) {
System.out.print(inputString + ": ");
if (inputString.matches(pattern)) {
System.out.println("Valid");
} else {
System.out.println("Invalid");
}
}
}
}
Fondamentalement, vous devez prendre 3 ou 4 modèles différents et les combiner avec "|":
String pattern = "\\d{10}|(?:\\d{3}-){2}\\d{4}|\\(\\d{3}\\)\\d{3}-?\\d{4}";
\d{10}
correspond à 1234567890(?:\d{3}-){2}\d{4}
correspond à 123-456-7890\(\d{3}\)\d{3}-?\d{4}
correspond (123)456-7890 ou (123) 4567890La regex dont vous avez besoin est:
String regEx = "^\\(?(\\d{3})\\)?[- ]?(\\d{3})[- ]?(\\d{4})$";
Explication regex:
^\\(?
- Peut commencer par une option "("
(\\d{3})
- suivi de 3 chiffres
\\)?
- Peut avoir un ")" optionnel
[- ]?
- Peut avoir un "-" optionnel après les 3 premiers chiffres ou après
(\\d{3})
- suivi de 3 chiffres.
[- ]?
- Peut avoir un autre "-" facultatif après les chiffres
(\\d{4})$
- se termine par quatre chiffres
String str= "^\\s?((\\+[1-9]{1,4}[ \\-]*)|(\\([0-9]{2,3}\\)[ \\-]*)|([0-9]{2,4})[ \\-]*)*?[0-9]{3,4}?[ \\-]*[0-9]{3,4}?\\s?";
if (Pattern.compile(str).matcher(" +33 - 123 456 789 ").matches()) {
System.out.println("yes");
} else {
System.out.println("no");
}
Créez un groupe sans capture de trois chiffres entre parenthèses ou trois chiffres (avec un tiret facultatif). Ensuite, vous avez besoin de trois chiffres (avec un autre tiret facultatif), suivis de quatre chiffres. Comme, (?:\\(\\d{3}\\)|\\d{3}[-]*)\\d{3}[-]*\\d{4}
. Et vous pourriez utiliser un Pattern
. Tous ensemble aiment,
String[] testStrings = {
/* Following are valid phone number examples */
"(123)4567890", "1234567890", "123-456-7890", "(123)456-7890",
/* Following are invalid phone numbers */
"(1234567890)","123)4567890", "12345678901", "(1)234567890",
"(123)-4567890", "1", "12-3456-7890", "123-4567", "Hello world"};
Pattern p = Pattern.compile("(?:\\(\\d{3}\\)|\\d{3}[-]*)\\d{3}[-]*\\d{4}");
for (String str : testStrings) {
if (p.matcher(str).matches()) {
System.out.printf("%s is valid%n", str);
} else {
System.out.printf("%s is not valid%n", str);
}
}