我想检查文本是否有合理的信息(例如电子邮件地址和号码,因为号码可以是电话号码或客户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,则用户会收到警告。但如果数字只是网址中的数字,则不应出现警告。
答案 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。