JAVA Regex-如何排除某些电子邮件扩展名?

时间:2019-04-11 02:29:16

标签: java regex

我的程序用于整理电子邮件并查找没有适当扩展名的电子邮件。为此,我正在Regex中进行实验,可以使它检测电子邮件中是否具有扩展名,或者根本没有扩展名,但是无法使程序检测该行中的扩展名是否不是我希望的特定扩展名。排除。

我尝试使用诸如?之类的标签!与陈述,并没有结果。我在正则表达式方面没有很多经验,所以我的尝试被编号了。

import { HttpParams, HttpClient } from "@angular/common/http";

export class UploadAdapter {
    constructor(
      private loader,
      public url:string,
      private http:HttpClient
      ) {
    }
//the uploadFile method use to upload image to your server
  uploadFile(file,url?:string,user?:string){
    let name = '';
    url='your api';
    let formData:FormData = new FormData();
    let headers = new Headers();
    name = file.name;
    formData.append('attachment', file, name);
    const dotIndex = name.lastIndexOf('.');
    const fileName  = dotIndex>0?name.substring(0,dotIndex):name;
    formData.append('name', fileName);
    formData.append('source', user);

    headers.append('Content-Type', 'multipart/form-data');
    headers.append('Accept', 'application/json');
    console.log('formData',formData);
    let params = new HttpParams();
    const options = {
        params: params,
        reportProgress: true,
    };
//http post return an observer
//so I need to convert to Promise
    return this.http.post(url,formData,options);
  }
//implement the upload 
  upload() {
      let upload = new Promise((resolve, reject)=>{
        this.loader['file'].then(
            (data)=>{
                this.uploadFile(data,this.url,'test')
                .subscribe(
                    (result)=>{
//resolve data formate must like this
//if **default** is missing, you will get an error
                        **resolve({ default: result['attachment'] })**
                    },
                    (error)=>{
                        reject(data.msg);
                    }
                );
            }
        );
      });
      return upload;
  }
  abort() {
      console.log("abort")
  }
}

该程序应能对所有扩展名不是@ Google.org或@ yahoo.net的电子邮件进行整理

程序找不到匹配项

3 个答案:

答案 0 :(得分:1)

您可以试试吗? https://regex101.com/r/hbnvr8/1/

Pattern.compile("^([A-Za-z0-9.]+(\\.?)+([A-z0-9]?))+@(?!(Yahoo.net|Google.org)$)[A-z]+\\.[A-z]+$")

答案 1 :(得分:0)

让这种模式适用于后遗症:

toFixed

答案 2 :(得分:0)

您可以使用否定的前行(?!Google\.org|Yahoo\.net)来断言@右侧的直接不是Google.org还是Yahoo.net。请注意对点进行转义以使其在字面上匹配。

如果您要允许的唯一字符列在字符类[A-Za-z0-9.]中,则可以使用正则表达式,该正则表达式首先使用[A-Za-z0-9]+来匹配不带点的字符类,

然后使用(?:\.[A-Za-z0-9])*从点开始重复0+次,以防止电子邮件以点开始或结束。

请注意,您可以扩展character classes以允许更多字符。

^[A-Za-z0-9]+(?:\.[A-Za-z0-9])*@(?!Google\.org|Yahoo\.net)[A-Za-z0-9]+(?:\.[A-Za-z0-9])*\.\w+$

在Java中

String regex = "^[A-Za-z0-9]+(?:\\.[A-Za-z0-9])*@(?!Google\\.org|Yahoo\\.net)[A-Za-z0-9]+(?:\\.[A-Za-z0-9])*\\.\\w+$";

Regex demo