正则表达式结合电子邮件和数字但不链接

时间:2018-01-19 11:58:35

标签: javascript regex

我想检查文本是否有合理的信息(例如电子邮件地址和号码,因为号码可以是电话号码或客户ID等。)

我有一个检测电子邮件的工作模式:

/(([^<>()\[\]\.,;:\s@\"]+(\.[^<>()\[\]\.,;:\s@\"]+)*)|(\".+\"))@(([^<>()[\]\.,;:\s@\"]+\.)+[^<>()[\]\.,;:\s@\"]{2,})/img

检测网址的工作模式:

/(www|http:|https:)+[^\s]+[\w]/img

这是我目前的数字模式:

/(| +|\+)(\d+){3,20}/img

但我想在某些情况下只检测数字。当它们在网址中使用或在用户名@mention中使用时,它们不应该匹配。

这是我测试模式的文本:

  

@HAMAPA @ Waage1965

     

www.telekomhilft.telekom.de/t5/Fragen-zur-Community/Community-Update-01-2018/m-p/3055244#M28054   der OrtderSchaltfläche是fehlerhaft(在das Register中的gehört)bzw。   das Register ist fehlerhaft,weildieseSchaltflächefehlt,das ist   nicht beabsichtigt,所以wie es aussieht.test3@telekom.de   Denn215685553555bezüglichPN-Register gibt es noch ein weiteres   问题,在einem anderen Beitrag gemeldet hatte中的das ich。恩德尔   Weil die“Neue Nachrichten”-Schaltflächeamfalschen Ort ist,ist die   dortüberhaupt+490154555356 vorhanden,der Fehler des falschen Ortes   gleicht somit derzeit ein Drittel eines anderen Fehlers aus。 0175   27557996

     

0175 12345678 001-541-754-3010   +490154555356 04435/1111 12334546546565

     

test2@gmx.net

     

test1@t-online.de Bitte folge dem 04435/1111 Link zu meiner Meldung,   Dort ist der Fehler beschrieben(inklusive zwei Bildern im Spoiler wie   esgeradefälschlicherweiseistund wie es eigentlich sein sollte an   der Stelle mit dem Register)。 Kannst ja mal selbst versuchen eine   vorhandene PNzuöffnen(z.B。aus deinen versendenen PNs)und dann   von dort auf eine PN der anderen Liste zu wechseln(z.B. auf   eingegangene PNs)。   http://telekomhilft.telekom.de/t5/Fragen-zur-Community/Community-Update-01-2018/m-p/3055244#M28054   der OrtderSchaltfläche是fehlerhaft(在das Register中的gehört)bzw。   das Register ist fehlerhaft,weildieseSchaltflächefehlt,das ist   nicht beabsichtigt,所以wie es aussieht.siegrun@telekom.de Denn   bezüglichPN-Register gibt es noch ein weiteres问题,das ich aber   在einem anderen Beitrag gemeldet hatte。 Und nur weil死于“Neue   Nachrichten“-Schaltflächeamfalschen Ort ist,ist diedortüberhaupt   vorhanden,der Fehler des falschen Ortes gleicht somit derzeit ein   Drittel eines anderen Fehlers aus。   https://telekomhilft.telekom.de/t5/Fragen-zur-Community/Community-Update-01-2018/m-p/3055244#M28054

在该示例中:我不希望网址中的数字匹配,我不希望用户名Waage1965的@mention中的数字匹配。

是否可以将模式组合成一种模式?我想要实现的是,如果用户的文本包含电子邮件地址或可能是电话号码或客户ID,则用户会收到警告。但如果数字只是网址中的数字,则不应出现警告。

1 个答案:

答案 0 :(得分:1)

这是一个非常讨厌的正则表达式,但它可以正常工作

package com.example.page;

import android.app.Activity;
import android.app.ProgressDialog;
import android.content.Intent;
import android.content.SharedPreferences;
import android.content.pm.PackageManager;
import android.content.res.Configuration;
import android.graphics.Bitmap;
import android.net.Uri;
import android.os.Build;
import android.os.Bundle;
import android.preference.PreferenceManager;
import android.support.v4.app.ActivityCompat;
import android.support.v4.content.ContextCompat;
import android.view.View;
import android.webkit.ValueCallback;
import android.webkit.WebChromeClient;
import android.webkit.WebSettings;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.widget.Toast;

import com.google.firebase.iid.FirebaseInstanceId;

public class MainActivity extends Activity {
    public static WebView mWebview;
    private android.content.Context Context;
    private static String getIntentValue = null;
    public static SharedPreferences sharedPreferences;
    private ProgressDialog mProgressDialog;
    private String mCM;
    private ValueCallback<Uri> mUM;
    private ValueCallback<Uri[]> mUMA;
    private final static int FCR=1;

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent intent){
        super.onActivityResult(requestCode, resultCode, intent);
        mWebview.setWebViewClient(new Callback());

    }

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        setContentView(R.layout.activity_main);
        Context = this;
        String regId = FirebaseInstanceId.getInstance().getToken();

        getIntentValue = getIntent().getStringExtra("value");

        sharedPreferences = PreferenceManager.getDefaultSharedPreferences(this);

        if (!DetectConnection.checkInternetConnection(this)) {
            Toast.makeText(getApplicationContext(), "No Internet Connection!", Toast.LENGTH_LONG).show();
            finish(); //Calling this method to close this activity when internet is not available.

        } else {

            mWebview = (WebView) findViewById(R.id.webview1);
            WebSettings webSettings = mWebview.getSettings();
            mWebview.getSettings().setJavaScriptEnabled(true);
            mWebview.setWebChromeClient(new WebChromeClient());
            mWebview.setWebViewClient(new CustomWebViewClient());

            //improve WebView Performance
            mWebview.getSettings().setRenderPriority(WebSettings.RenderPriority.HIGH);
            mWebview.getSettings().setAppCacheEnabled(false);
            mWebview.getSettings().setCacheMode(WebSettings.LOAD_DEFAULT);


            if(Build.VERSION.SDK_INT >=23 && (ContextCompat.checkSelfPermission(this, android.Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED || ContextCompat.checkSelfPermission(this, android.Manifest.permission.CAMERA) != PackageManager.PERMISSION_GRANTED)) {
                ActivityCompat.requestPermissions(MainActivity.this, new String[]{android.Manifest.permission.WRITE_EXTERNAL_STORAGE, android.Manifest.permission.CAMERA}, 1);
            }

            mWebview.setScrollBarStyle(View.SCROLLBARS_INSIDE_OVERLAY);
            webSettings.setDomStorageEnabled(true);
            webSettings.setLayoutAlgorithm(WebSettings.LayoutAlgorithm.NARROW_COLUMNS);
            webSettings.setUseWideViewPort(true);
            webSettings.setAllowFileAccess(true);
            webSettings.setSavePassword(true);
            webSettings.setSaveFormData(true);
            webSettings.setEnableSmoothTransition(true);

            // progress dialog
            mProgressDialog = new ProgressDialog(Context);

            if (sharedPreferences.getBoolean("isKeyGenerated", true)) {

                if (getIntentValue != null) {
                    mWebview.loadUrl("http://www.example.com/page");
                    getIntentValue = null;

                } else {
                    mWebview.loadUrl("http://www.example.com/page2");
                }
            }
        }


    }



    public class Callback extends WebViewClient{
        public void onReceivedError(WebView view, int errorCode, String description, String failingUrl){
            Toast.makeText(getApplicationContext(), "Failed loading app!", Toast.LENGTH_SHORT).show();
        }
    }


    // Function to load all URLs in same webview
    private class CustomWebViewClient extends WebViewClient {
        public boolean shouldOverrideUrlLoading(WebView view, String url) {
            if (url.contains(".pdf")) {
                Intent i = new Intent(Intent.ACTION_VIEW, Uri.parse(url));
                startActivity(i);
            } else {
                view.loadUrl(url);
            }
            return true;
        }

        @Override
        public void onPageStarted(WebView view, String url, Bitmap favicon) {
            // TODO Auto-generated method stub
            super.onPageStarted(view, url, favicon);

            //on page started, show loading page
            mProgressDialog.setCancelable(true);
            mProgressDialog.setProgressStyle(ProgressDialog.STYLE_SPINNER);
            mProgressDialog.show();

        }

        @Override
        public void onPageFinished(WebView view, String url)
        {
            String currentPage= mWebview.getUrl();

            SharedPreferences.Editor editor = sharedPreferences.edit();
            editor.putString("currentpage",currentPage);
            editor.commit();

            //after loading page, remove loading page

            // TODO Auto-generated method stub
            super.onPageFinished(view, url);
            mProgressDialog.dismiss();
        }

        @Override
        public void onReceivedError(WebView view, int errorCode,
                                    String description, String failingUrl) {
            view.loadUrl("http://example.com/page");
        }

    }

    @Override
    public void onBackPressed() {
        SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(this);
        String currenturl = sharedPreferences.getString("currentpage", null);

        mWebview.requestFocus();

        if (currenturl.contains("http://example.com/page")){
            moveTaskToBack(true);
        }else{
            mWebview.goBack();
        }

        if (mWebview.canGoBack()) {
            if (!DetectConnection.checkInternetConnection(Context)) {
                Toast.makeText(Context, "No Internet Connection!", Toast.LENGTH_SHORT).show();
            }

        }
    }


    public static void loadUrl(String key) {

        if (getIntentValue != null) {
            mWebview.loadUrl("http://example.com/page");
            getIntentValue = null;
        } else {
            mWebview.loadUrl("http://example.com/page");
        }

    }


    public static void reLoad() {
        mWebview.reload();
    }

    @Override
    public void onConfigurationChanged(Configuration newConfig){
        super.onConfigurationChanged(newConfig);
    }
}

我几乎在你的表达式之间添加了OR(/(([^<>()\[\]\.,;:\s@\"]+(\.[^<>()\[\]\.,;:\s@\"]+)*)|(\".+\"))@(([^<>()[\]\.,;:\s@\"]+\.)+[^<>()[\]\.,;:\s@\"]{2,})|\+?[\d-]{9,18}/img )运算符,并修改了电话的正则表达式:|。你没有定义你认为的电话号码,所以你可以调整大括号中的数字。

完整测试为here