如何验证电话号码格式

2024-01-10

我即将创建电话号码格式验证。格式为 10 位数字,包括加号,例如:+0133999504。尽管我已经声明了模式,但我尝试禁止使用“-”符号或任何其他字符,但验证不起作用。还有其他想法或解决方案吗?

1st I declared the string regex:

String PhoneNo;
String PhoneNo_PATTERN ="[\\+]\\d{3}\\d{7}";

2nd I make a if..else statement:
 {
                    Pattern pattern = Pattern.compile(PhoneNo_PATTERN);
                    Matcher matcher = pattern.matcher(PhoneNo);
                    if (!matcher.matches()) 
                    {
                    inputemergencyContactNo.setError("Please enter Emergency Contact No");
                    }
                    else{
                    Toast.makeText(RiderProfile.this, "Please filled in All field", Toast.LENGTH_SHORT).show();
                    }

为什么不删除所有非数字,然后计算剩下的数字,然后再将加号放回去?这使得用户可以自由地填写他们想要的电话号码......

String PhoneNo = "+123-456 7890";
String Regex = "[^\\d]";
String PhoneDigits = PhoneNo.replaceAll(Regex, "");
if (PhoneDigits.length()!=10)  
{
    // error message
}
else
{
    PhoneNo = "+";
    PhoneNo = PhoneNo.concat(PhoneDigits); // adding the plus sign

    // validation successful  

}

如果您的应用程序供国际使用,请替换

if (!PhoneDigits.length()!=10) 

with

if(PhoneDigits.length() < 6 || PhoneDigits.length() > 13)

正如法蒂汗建议的那样。


要将其应用到您发布的代码中Android EditText 验证和正则表达式 https://stackoverflow.com/questions/27265843/android-edittext-validation-and-regex首先将此方法包含在您的公共类或包含 onClick() 的类中:

public boolean validateNumber(String S) {
    String Regex = "[^\\d]";
    String PhoneDigits = S.replaceAll(Regex, "");
    return (PhoneDigits.length()!=10);
}

并在 CreateNewRider 类中包含此方法:

protected String tidyNumber(String S) {
    String Regex = "[^\\d]";
    String PhoneDigits = S.replaceAll(Regex, "");
    String Plus = "+";
    return Plus.concat(PhoneDigits);
}

这是验证发生的地方......

@Override
public void onClick(View view) {

    Boolean b = false;
    if(inputfullname.getText().toString().equals("")) b = true;

    else if(... // do this for all fields

    else if(inputmobileNo.getText().toString().equals("")) b=true;
    else if(inputemergencyContactNo.getText().toString().equals("")) b=true;
    else {
        if(validateNumber( inputmobileNo.getText().toString() ) 
            Toast.makeText(RiderProfile.this, "Invalid mobile number", Toast.LENGTH_SHORT).show();

        else if(validateNumber( inputemergencyContactNo.getText().toString() ) 
            Toast.makeText(RiderProfile.this, "Invalid emergency contact number", Toast.LENGTH_SHORT).show();
        else {
            // Validation succesful

            new CreateNewRider().execute();

        }   
    }
    if(b) Toast.makeText(RiderProfile.this, "Please filled in All field", Toast.LENGTH_SHORT).show();
}

然后在 CreateNewRider 类中使用 tidyNumber() :

    protected String doInBackground(String... args) {
        String fullname= inputfullname.getText().toString();
        String IC= inputIC.getText().toString();
        String mobileNo= tidyNumber( inputmobileNo.getText().toString() );
        String emergencyContactName= inputemergencyContactName.getText().toString() );
        String emergencyContactNo= tidyNumber( inputemergencyContactNo.getText().toString() );

        ...
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何验证电话号码格式 的相关文章

随机推荐

  • 正则表达式匹配java中的变量声明

    我想解析变量声明语句并获取变量名称 我正在做下面的事情 String var private String ipaddress 我使用下面的正则表达式模式来匹配上面的字符串 private s a z s a z0 9 这是行不通的 它说找
  • 可以隐式检查“零”或“空”的变量类型

    我有一个接收变量的函数x并检查它的 零 或 空 Using PEP 484 https www python org dev peps pep 0484 类型提示语法 我会使用什么类型提示 我该如何检查它是否是明确的 boolable ht
  • 为什么 Android Studio 不接受新的 Java JDK 位置

    我试图将 JDK 位置从 C Program Files Java jdk1 7 0 09 更改为 C Program Files Java jdk1 8 0 25 但 Android Studio 似乎完全忽略了更改 该位置仍然是 C P
  • 为什么 PHP 中的链接服务器查询需要将 ANSI_NULLS 和 ANSI_WARNINGS 设置为 on?

    我有一个使用 OpenQuery 的链接服务器语句 SELECT mycol1 mycol2 mycol3 FROM OPENQUERY MYLINKEDSERVER SELECT FROM mysqldb table 上述内容在 SSMS
  • 为什么在这个简单的基准测试中 SQLite 比 Redis 更快?

    我在本地机器上做了简单的性能测试 这是python脚本 import redis import sqlite3 import time data N 100000 for i in xrange N key key str i value
  • 如何将 Font Awesome 图标水平居中?

    我有一张桌子 上面有字体真棒 http fortawesome github io Font Awesome 图标 我想将文本左对齐和居中对齐 我尝试过居中 i 但不起作用 HTML td i class icon ok i td CSS
  • Android:意图标志销毁活动并开始新活动

    所以我有一个登录活动 此活动会膨胀一个具有 USER NAME 和 PASSWORD EditText 视图的 login xml 布局 当我输入用户名和密码并单击登录按钮时 我会启动一个新活动 新的活动有一个注销按钮 它基本上只是启动前一
  • FoldList 类似于 J 中的原语

    Mathematica 有一个内置函数 称为FoldList FoldList函数说明 http reference wolfram com mathematica ref FoldList html J中有类似的原语动词吗 我知道 J 有
  • 如何保存 Eclipse 设置(字体、格式等)?

    如何在 Eclipse 3 6 中导出我的设置 字体 语法着色 格式等 以便我可以在另一个安装中再次使用它们 您可以将文件夹 metadata 保存在工作区中 该文件夹包含您的首选项 只需在重新安装并完成后恢复它即可 请注意 metadat
  • Azure DevOps 管道触发器问题消息不会消失

    我们的团队正在实施 Azure DevOps 测试管道 在我们最初提交创建管道 yml 文件后 显示了此错误消息 经过研究后 我意识到我忘记将触发器包含在 yml 中 但是添加后 这个错误消息并没有消失 不过 管道正在按预期工作 我们只是使
  • Asp .Net Core单元测试模拟UserManager.CreateAsync并返回Identity结果

    致力于 Net Core 项目并创建了以下服务来跨页面共享通用方法 namespace MyApp Tests Services public class UserServiceTest Fact public async Task Cre
  • C++ 使用大括号而不是赋值运算符声明和实例化作用域变量

    我正在观看 Bjarne Stroustrup 关于 C 11 风格的主题演讲 link http channel9 msdn com Events GoingNative GoingNative 2012 Keynote Bjarne S
  • 删除超过 2 小时的 Firebase 数据

    我想删除超过两个小时的数据 目前 在客户端 我循环遍历所有数据并对过时的数据运行删除 当我这样做时 db on value 每次删除某些内容时都会调用该函数 另外 只有当客户端连接时才会删除内容 如果两个客户端同时连接会发生什么 我在哪里可
  • 我应该使用“==”进行 .NET 本地化字符串比较吗?

    NET 中不使用 比较本地化字符串的原因是什么 如果我使用 CultureInfo 将如何执行比较 如果将文化感知字符串与 进行比较 例如 Strasse 与 Stra e 则返回 false 如果您需要对 UI 内容进行文化感知比较 Li
  • Map>

    Java 为我提供了
  • Android Maps API 版本 1 到版本 2 的迁移

    背景 我继承了别人的问题 并正在尝试启动并运行一个应用程序 多名开发人员放弃了该项目 现在轮到我了 我是一名 iOS 开发人员 但我已经完成了一些简单的 Android 项目 问题应用程序是一个原生 Android 最初使用 API 级别
  • IISExpress 是单线程的吗?

    我正在编写一个利用声明来确保安全的自定义 Net 应用程序 因为我们正在跨越许多边界 Web API 批处理等 在开发过程中 有时我会在通过 Chrome 登录时在系统中创建一些内容 然后我会通过 Edge 中的另一个帐户来测试新创建的项目
  • 如何在 git 中显示作者贡献的统计信息?

    我正在与一个团队合作开发一个 git 项目 我希望看到每个作者在编写的行数或编辑的行数等方面的贡献 我如何显示作者的统计数据 很简单 git shortlog s n
  • 使用robotframework api从python执行robot关键字

    用机器人语言编写复杂的机器人关键字有时非常耗时 因为机器人语言不是真正的编程语言 我想用 python 编写我的关键字 并且只用 robotsframework 语言公开简单的 html 表 问题是我们已经有很多用机器人语言编写的低级机器人
  • 如何验证电话号码格式

    我即将创建电话号码格式验证 格式为 10 位数字 包括加号 例如 0133999504 尽管我已经声明了模式 但我尝试禁止使用 符号或任何其他字符 但验证不起作用 还有其他想法或解决方案吗 1st I declared the string