设置自动链接的最小长度

Posted

技术标签:

【中文标题】设置自动链接的最小长度【英文标题】:Setting minimum length for auto link 【发布时间】:2018-07-30 11:29:49 【问题描述】:

我有一个很大的段落,其中可能包含数字、电子邮件地址和链接。所以我必须为我的文本视图设置setAutoLinkMask(Linkify.PHONE_NUMBERS | Linkify.EMAIL_ADDRESSES | Linkify.WEB_URLS)

内容可能包含不同数字的数字。我想设置至少 8 位数字作为电话号码链接。(例如:12345678)

是否可以为 Linkify.PHONE_NUMBERS 设置最小长度? 有没有办法做到这一点?

【问题讨论】:

【参考方案1】:

如果您可以使用Linkify.MatchFilter 指定最小长度或您的一些其他要求。 android没有提供任何直接的方式。

在SO post 的某个地方也找到了一些很好的例子。

【讨论】:

【参考方案2】:

使用以下模式:

    SpannableString buffer = new SpannableString(text);
    Pattern pattern = Pattern.compile("^[0-9]\d7,9$");
    Linkify.addLinks(buffer , pattern,"");

【讨论】:

【参考方案3】:

是的,有可能。我研究了这种现象:-)

要设置电话号码的最小长度,请使用以下代码:

private final Linkify.MatchFilter matchFilterForPhone = new Linkify.MatchFilter() 
    @Override
    public boolean acceptMatch(CharSequence s, int start, int end) 
        int digitCount = 0;
        for (int i = start; i < end; i++) 
            if (Character.isDigit(s.charAt(i))) 
                digitCount++;
                if (digitCount >= 6)  // HERE: number 6 is minimum
                    return true;
                
            
        
        return false;
    
;

要正确格式化和链接电话号码,请使用:

final SpannableString s = new SpannableString(myTekst);
Linkify.addLinks(s, android.util.Patterns.PHONE, "tel:", matchFilterForPhone, Linkify.sPhoneNumberTransformFilter);

现在将格式化的s 放入您的TextView,然后调用:

findViewById(R.id.message).setLinkTextColor(Color.BLUE);
findViewById(R.id.message).setMovementMethod(LinkMovementMethod.getInstance());

就是这样。感谢投票。

【讨论】:

以上是关于设置自动链接的最小长度的主要内容,如果未能解决你的问题,请参考以下文章

如何在反应材料-ui自动完成中实现最小字符长度功能

如何设置密码的最小长度

EF Fluent Api 是不是可以设置最小长度?

设置最小密码长度 Firebase 电子邮件和密码身份验证

在组策略中设置最小密码长度

注册填写密码,最小长度为6个字符是啥