① java如何驗證一個email地址是否真實有效。
首先使用java提供的格式類判斷email是否格式有誤,然後使用開源框架,驗證郵箱是否有用,示例如下:
publicstaticbooleancheckEmail(Stringemail){
if(!email.matches("[\w\.\-]+@([\w\-]+\.)+[\w\-]+")){
returnfalse;
}
Stringhost="";
StringhostName=email.split("@")[1];
Record[]result=null;
SMTPClientclient=newSMTPClient();
try{
//查找記錄
Lookuplookup=newLookup(hostName,Type.MX);
lookup.run();
if(lookup.getResult()!=Lookup.SUCCESSFUL){
returnfalse;
}else{
result=lookup.getAnswers();
}
//連接到郵箱伺服器
for(inti=0;i<result.length;i++){
host=result[i].getAdditionalName().toString();
client.connect(host);
if(!SMTPReply.isPositiveCompletion(client.getReplyCode())){
client.disconnect();
continue;
}else{
break;
}
}
//以下2項自己填寫快速的,有效的郵箱
client.login("163.com");
client.setSender("[email protected]");
client.addRecipient(email);
if(250==client.getReplyCode()){
returntrue;
}
}catch(Exceptione){
e.printStackTrace();
}finally{
try{
client.disconnect();
}catch(IOExceptione){
}
}
returnfalse;
}
需要的jar支持:commons-net-2.2.jar,dnsjava-2.1.1.jar
② Java中不用正則表達式 如何驗證郵箱
import java.util.Scanner;
public class Test
{
public static void main(String args[])
{
Scanner sc=new Scanner(System.in);
String name=sc.next();
if(chose(name))
{
System.out.println("郵箱合法");
}
else
{
System.out.println("郵箱非法");
}
}
public static boolean chose(String a)
{
String c;
String d;
char b=a.charAt(0);
if(a.equals(""))
{
return false;
}
if(b==' ' && b=='@' && b=='.')
{
return false;
}
c=a.substring(a.length()-4,a.length());
if(!(c.equals(".com")))
{
return false;
}
//用判定"@."是否存在好一些
if(!a.contains("@."))
{
return false;
}
}
參考:http://..com/question/59290561.html
③ java發送郵件程序如何驗證郵件是否發送失敗
public boolean sendout()
{
try
{
mimeMessage.setContent(mp);
mimeMessage.saveChanges();
Session mailSession = Session.getInstance(props, null);
Transport transport = mailSession.getTransport("smtp");
transport.connect(hostname, username, password);
transport.sendMessage(mimeMessage, mimeMessage.getRecipients(javax.mail.Message.RecipientType.TO));
transport.close();
}
catch(Exception e)
{
e.printStackTrace();
return false;
}
return true;
}
捕獲異常判斷
④ Java驗證郵箱是否真實存在有效
可以驗證郵箱格式
可以通過郵箱接收驗證碼的形式 驗證郵箱的可用性
⑤ 如何用java檢驗電子郵箱格式的合法性要用到String的方法來判斷
自己寫邏輯驗證的方式可以做到。我寫了下面的:
public static boolean validateEmail(String email) {
boolean flag = false;
int pos = email.indexOf("@");
if (pos == -1 || pos == 0 || pos == email.length() - 1) {
return false;
}
String[] strings = email.split("@");
if (strings.length != 2) {// 如果郵箱不是xxx@xxx格式
return false;
}
CharSequence cs = strings[0];
for (int i = 0; i < cs.length(); i++) {
char c = cs.charAt(i);
if (!Character.isLetter(c) && !Character.isDigit(c)) {
return false;
}
}
pos = strings[1].indexOf(".");// 如果@後面沒有.,則是錯誤的郵箱。
if (pos == -1 || pos == 0 || pos == email.length() - 1) {
return false;
}
strings = strings[1].split(".");
for (int j = 0; j < strings.length; j++) {
cs = strings[j];
if (cs.length() == 0) {
return false;
}
for (int i = 0; i < cs.length(); i++) {//如果保護不規則的字元,表示錯誤
char c = cs.charAt(i);
if (!Character.isLetter(c) && !Character.isDigit(c)) {
return false;
}
}
}
return true;
}
這個效率也不會差很多,不過我推薦matches方法,經過測試的,matches匹配方式運行10000次的時間比上面的時間少了20毫秒。
⑥ 通過javamail 驗證郵箱是否有效
通過正則表達式
/**
* 驗證郵箱
*
* @版param email
* @return
*/
public static boolean checkEmail(String email) {
boolean flag = false;
try {
String check = "^([a-z0-9A-Z]+[-|權_|\\.]?)+[a-z0-9A-Z]@([a-z0-9A-Z]+(-[a-z0-9A-Z]+)?\\.)+[a-zA-Z]{2,}$";
Pattern regex = Pattern.compile(check);
Matcher matcher = regex.matcher(email);
flag = matcher.matches();
} catch (Exception e) {
flag = false;
}
return flag;
}
⑦ javamail發送郵箱怎麼驗證接收方的郵箱地址是否存在
這個我覺得不能保證有效的,因為郵件的發送是由伺服器處理的而且中間可能存在轉發,所以你想知道對方郵箱是否不存在是不能精確的得到回復,比如 DNS 中的 MX 記錄可以把我個人的伺服器的郵件服務轉發到 gmail 上,這中間你詢問我的伺服器得到不到任何回復,因為我根本沒開啟這個服務。唯一能確認的辦法只有嘗試登錄,不過要意識到,接收郵件的伺服器和郵箱地址後綴本身並沒有對應關系(郵箱後綴 .com並不代表我的伺服器就一定是 .com)但我想就算伺服器願意告訴你這個用戶不存在(多數情況下它可能不明說是密碼錯了還是用戶名錯了),我覺得你也不可能在程序中頻繁地詢問,因為伺服器會認為你是在攻擊它。
所以你這想法本身沒有理論上的依據,如果什麼都知道,那這世界垃圾郵件你能阻止么?
不過換個角度想,Foxmail 郵件特快傳遞的原理是繞過郵件轉發,直接嘗試向對方郵件伺服器發送郵件(就像我上面的例子,我在自己的動態DNS伺服器上配置一個 MX 記錄,把所有跟郵件相關的請求全部轉發到 gmail 伺服器上,這時向我發郵件需要經過多道手續,首先DNS服務商本身也提供郵件服務,可能它會先收下郵件,然後轉發出去)因此,一般對方伺服器會在很短的時間內處理這個郵件,那麼郵箱是否存在就很快得到答復,當然,我們不能假定伺服器會立即答復或者伺服器會在你嘗試發送郵件的時候就告訴你用戶不存在。因為我們是通過 QQ 郵件伺服器來發送郵件的,我們的程序本身自己不是郵件伺服器,因此想立即知道對方郵箱是否存在,只有自己程序來充當郵件伺服器來詢問對方的伺服器(注意這過程中要已經繞過了MX路由找到了目標伺服器),就好像你這個程序連接到對方伺服器後,說:「伺服器 qq 正在嘗試轉發一封到自 .com 某用戶 QQ 的郵件到你的用戶 名下,請收下它「,這時候對方伺服器會立即告訴你這個用戶 不存在。
⑧ java里如何判斷Email是否發送成功
package com.liuns.mail.test;
import java.util.Date;
import java.util.Properties;
import javax.activation.DataHandler;
import javax.activation.FileDataSource;
import javax.mail.Authenticator;
import javax.mail.BodyPart;
import javax.mail.Message.RecipientType;
import javax.mail.MessagingException;
import javax.mail.Multipart;
import javax.mail.PasswordAuthentication;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeBodyPart;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.MimeMultipart;
import javax.mail.internet.MimeUtility;
public class MailTest {
//發送的郵箱 內部代碼只適用qq郵箱
private static final String USER = "[email protected]";
//授權密碼 通過QQ郵箱設置->賬戶->POP3/IMAP/SMTP/Exchange/CardDAV/CalDAV服務->開啟POP3/SMTP服務獲取
private static final String PWD = "xxx";
private String[] to;
private String[] cc;//抄送
private String[] bcc;//密送
private String[] fileList;//附件
private String subject;//主題
private String content;//內容,可以用html語言寫
public void sendMessage() throws Exception {
// 配置發送郵件的環境屬性
final Properties props = new Properties();
//下面兩段代碼是設置ssl和埠,不設置發送不出去。
props.setProperty("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory");
//props.setProperty("mail.smtp.port", "465");
props.setProperty("mail.smtp.socketFactory.port", "465");
// 表示SMTP發送郵件,需要進行身份驗證
props.setProperty("mail.transport.protocol", "smtp");// 設置傳輸協議
props.put("mail.smtp.auth", "true");
props.put("mail.smtp.host", "smtp.qq.com");//QQ郵箱的伺服器 如果是企業郵箱或者其他郵箱得更換該伺服器地址
// 發件人的賬號
props.put("mail.user", USER);
// 訪問SMTP服務時需要提供的密碼
props.put("mail.password", PWD);
// 構建授權信息,用於進行SMTP進行身份驗證
Authenticator authenticator = new Authenticator() {
@Override
protected PasswordAuthentication getPasswordAuthentication() {
// 用戶名、密碼
String userName = props.getProperty("mail.user");
String password = props.getProperty("mail.password");
return new PasswordAuthentication(userName, password);
}
};
// 使用環境屬性和授權信息,創建郵件會話
Session mailSession = Session.getInstance(props, authenticator);
// 創建郵件消息
MimeMessage message = new MimeMessage(mailSession);
BodyPart messageBodyPart = new MimeBodyPart();
Multipart multipart = new MimeMultipart();
// 設置發件人
InternetAddress form = new InternetAddress(
props.getProperty("mail.user"));
message.setFrom(form);
//發送
if (to != null) {
String toList = getMailList(to);
InternetAddress[] iaToList = new InternetAddress().parse(toList);
message.setRecipients(RecipientType.TO, iaToList); // 收件人
}
//抄送
if (cc != null) {
String toListcc = getMailList(cc);
InternetAddress[] iaToListcc = new InternetAddress().parse(toListcc);
message.setRecipients(RecipientType.CC, iaToListcc); // 抄送人
}
//密送
if (bcc != null) {
String toListbcc = getMailList(bcc);
InternetAddress[] iaToListbcc = new InternetAddress().parse(toListbcc);
message.setRecipients(RecipientType.BCC, iaToListbcc); // 密送人
}
message.setSentDate(new Date()); // 發送日期 該日期可以隨意寫,你可以寫上昨天的日期(效果很特別,親測,有興趣可以試試),或者抽象出來形成一個參數。
message.setSubject(subject); // 主題
message.setText(content); // 內容
//顯示以html格式的文本內容
messageBodyPart.setContent(content,"text/html;charset=utf-8");
multipart.addBodyPart(messageBodyPart);
//保存多個附件
if(fileList!=null){
addTach(fileList, multipart);
}
message.setContent(multipart);
// 發送郵件
Transport.send(message);
}
public void setTo(String[] to) {
this.to = to;
}
public void setCc(String[] cc) {
this.cc = cc;
}
public void setBcc(String[] bcc) {
this.bcc = bcc;
}
public void setSubject(String subject) {
this.subject = subject;
}
public void setContent(String content) {
this.content = content;
}
public void setFileList(String[] fileList) {
this.fileList = fileList;
}
private String getMailList(String[] mailArray) {
StringBuffer toList = new StringBuffer();
int length = mailArray.length;
if (mailArray != null && length < 2) {
toList.append(mailArray[0]);
} else {
for (int i = 0; i < length; i++) {
toList.append(mailArray[i]);
if (i != (length - 1)) {
toList.append(",");
}
}
}
return toList.toString();
}
//添加多個附件
public void addTach(String fileList[], Multipart multipart) throws Exception {
for (int index = 0; index < fileList.length; index++) {
MimeBodyPart mailArchieve = new MimeBodyPart();
FileDataSource fds = new FileDataSource(fileList[index]);
mailArchieve.setDataHandler(new DataHandler(fds));
mailArchieve.setFileName(MimeUtility.encodeText(fds.getName(),"UTF-8","B"));
multipart.addBodyPart(mailArchieve);
}
}
//以下是演示demo
public static void main(String args[]) {
MailTest mail = new MailTest();
mail.setSubject("java郵件");
mail.setContent("你好 這是第一個java 程序發送郵件");
//收件人 可以發給其他郵箱(163等) 下同
mail.setTo(new String[] {"[email protected]"});
//抄送
// mail.setCc(new String[] {"[email protected]","[email protected]"});
//密送
//mail.setBcc(new String[] {"[email protected]","[email protected]"});
//發送附件列表 可以寫絕對路徑 也可以寫相對路徑(起點是項目根目錄)
// mail.setFileList(new String[] {"D:\\aa.txt"});
//發送郵件
try {
mail.sendMessage();
System.out.println("發送郵件成功!");
} catch (Exception e) {
System.out.println("發送郵件失敗!");
e.printStackTrace();
}
}
}
⑨ java怎麼實現郵箱驗證碼失效的
兩種做法:
1、短驗證碼:伺服器端記錄了該驗證碼及對應的時間戳;
2、長驗證碼:驗證碼中包含時間戳,以及,伺服器給該驗證碼內容的簽名摘要;
⑩ 怎麼用JAVA代碼實現驗證郵箱地址是否合法
正則表達式30分鍾入門
元字元:
\b 代表著單詞的開頭或結尾,也就是單詞的分界處.如果要精確地查找hi這個單詞的話,我們應該使用\bhi\b.
.是另一個元字元,匹配除了換行符以外的任意字元,*同樣是元字元,它指定*前邊的內容可以重復任意次以使整個表達式得到匹配。
.*連在一起就意味著任意數量的不包含換行的字元。
\d是一個新的元字元,匹配任意的數字,0\d\d-\d\d\d\d\d\d\d\d也就是中國的電話號碼.為了避免那麼多煩人的重復,我們也可以這樣寫這個表達式:0\d{2}-\d{8}。
\s匹配任意的空白符,包括空格,製表符(Tab),換行符,中文全形空格等。\w匹配字母或數字或下劃線或漢字。
\b\w{6}\b 匹配剛好6個字母/數字的單詞。
字元轉義:使用\來取消這些字元的特殊意義。因此,你應該使用\.和\*。當然,要查找\本身,你也得用\\。
代碼 說明
. 匹配除換行符以外的任意字元
\w 匹配字母或數字或下劃線或漢字
\s 匹配任意的空白符
\d 匹配數字
\b 匹配單詞的開始或結束
^ 匹配字元串的開始
$ 匹配字元串的結束
重復:
常用的限定符
代碼/語法 說明
* 重復零次或更多次
+ 重復一次或更多次
? 重復零次或一次
{n} 重復n次
{n,} 重復n次或更多次
{n,m} 重復n到m次
要想查找數字,字母或數字,你只需要在中括弧里列出它們就行了,像[aeiou]就匹配任何一個母音字母,[.?!]匹配標點符號(.或?或!)
反義:
常用的反義代碼
代碼/語法 說明
\W 匹配任意不是字母,數字,下劃線,漢字的字元
\S 匹配任意不是空白符的字元
\D 匹配任意非數字的字元
\B 匹配不是單詞開頭或結束的位置
[^x] 匹配除了x以外的任意字元
[^aeiou] 匹配除了aeiou這幾個字母以外的任意字元
替換:
正則表達式里的替換指的是有幾種規則,如果滿足其中任意一種規則都應該當成匹配,具體方法是用|把不同的規則分隔開。
0\d{2}-\d{8}|0\d{3}-\d{7}這個表達式能匹配兩種以連字型大小分隔的電話號碼:一種是三位區號,8位本地號(如010-12345678),一種是4位區號,7位本地號(0376-2233445)。
\(0\d{2}\)[- ]?\d{8}|0\d{2}[- ]?\d{8}這個表達式匹配3位區號的電話號碼,其中區號可以用小括弧括起來,也可以不用,區號與本地號間可以用連字型大小或空格間隔,也可以沒有間隔。你可以試試用替換|把這個表達式擴展成也支持4位區號的。
\d{5}-\d{4}|\d{5}這個表達式用於匹配美國的郵政編碼。美國郵編的規則是5位數字,或者用連字型大小間隔的9位數字。之所以要給出這個例子是因為它能說明一個問題:使用替換時,順序是很重要的。如果你把它改成\d{5}|\d{5}-\d{4}的話,那麼就只會匹配5位的郵編(以及9位郵編的前5位)。原因是匹配替換時,將會從左到右地測試每個分枝條件,如果滿足了某個分枝的話,就不會去管其它的替換條件了。
分組:
如果想要重復一個字元串又該怎麼辦?你可以用小括弧來指定子表達式(也叫做分組),然後你就可以指定這個子表達式的重復次數了。
(\d{1,3}\.){3}\d{1,3}是一個簡單的IP地址匹配表達式。要理解這個表達式,請按下列順序分析它:\d{1,3}匹配1到3位的數字,(\d{1,3}\.}{3}匹配三位數字加上一個英文句號(這個整體也就是這個分組)重復3次,最後再加上一個一到三位的數字(\d{1,3})。不幸的是,它也將匹配256.300.888.999這種不可能存在的IP地址(IP地址中每個數字都不能大於255)。如果能使用算術比較的話,或許能簡單地解決這個問題,但是正則表達式中並不提供關於數學的任何功能,所以只能使用冗長的分組,選擇,字元類來描述一個正確的IP地址:((2[0-4]\d|25[0-5]|[01]?\d\d?)\.){3}(2[0-4]\d|25[0-5]|[01]?\d\d?)。
後向引用:
後向引用用於重復搜索前面某個分組匹配的文本。例如,\1代表分組1匹配的文本。難以理解?請看示例:
\b(\w+)\b\s+\1\b可以用來匹配重復的單詞,像go go, kitty kitty。首先是一個單詞,也就是單詞開始處和結束處之間的多於一個的字母或數字(\b(\w+)\b),然後是1個或幾個空白符(\s+,最後是前面匹配的那個單詞(\1)。
懶惰限定符
*? 重復任意次,但盡可能少重復
+? 重復1次或更多次,但盡可能少重復
?? 重復0次或1次,但盡可能少重復
{n,m}? 重復n到m次,但盡可能少重復
{n,}? 重復n次以上,但盡可能少重復
位置指定:
接下來的四個用於查找在某些內容(但並不包括這些內容)之前或之後的東西,也就是說它們用於指定一個位置,就像\b,^,$那樣,因此它們也被稱為零寬斷言。最好還是拿例子來說明吧:
(?=exp)也叫零寬先行斷言,它匹配文本中的某些位置,這些位置的後面能匹配給定的後綴exp。比如\b\w+(?=ing\b),匹配以ing結尾的單詞的前面部分(除了ing以外的部分),如果在查找I'm singing while you're dancing.時,它會匹配sing和danc。
(?<=exp)也叫零寬後行斷言,它匹配文本中的某些位置,這些位置的前面能給定的前綴匹配exp。比如(?<=\bre)\w+\b會匹配以re開頭的單詞的後半部分(除了re以外的部分),例如在查找reading a book時,它匹配ading。
假如你想要給一個很長的數字中每三位間加一個逗號(當然是從右邊加起了),你可以這樣查找需要在前面和裡面添加逗號的部分:((?<=\d)\d{3})*\b。請仔細分析這個表達式,它可能不像你第一眼看出來的那麼簡單。
下面這個例子同時使用了前綴和後綴:(?<=\s)\d+(?=\s)匹配以空白符間隔的數字(再次強調,不包括這些空白符)。
負向位置指定:
前面我們提到過怎麼查找不是某個字元或不在某個字元類里的字元的方法(反義)。但是如果我們只是想要確保某個字元沒有出現,但並不想去匹配它時怎麼辦?例如,如果我們想查找這樣的單詞--它裡面出現了字母q,但是q後面跟的不是字母u,我們可以嘗試這樣:
\b\w*q[^u]\w*\b匹配包含後面不是字母u的字母q的單詞。但是如果多做測試(或者你思維足夠敏銳,直接就觀察出來了),你會發現,如果q出現在單詞的結尾的話,像Iraq,Benq,這個表達式就會出錯。這是因為[^u]總是匹配一個字元,所以如果q是單詞的最後一個字元的話,後面的[^u]將會匹配q後面的單詞分隔符(可能是空格,或者是句號或其它的什麼),後面的\w+\b將會匹配下一個單詞,於是\b\w*q[^u]\w*\b就能匹配整個Iraq fighting。負向位置指定能解決這樣的問題,因為它只匹配一個位置,並不消費任何字元。現在,我們可以這樣來解決這個問題:\b\w*q(?!u)\w*\b。
零寬負向先行斷言(?!exp),只會匹配後綴exp不存在的位置。\d{3}(?!\d)匹配三位數字,而且這三位數字的後面不能是數字。
同理,我們可以用(?<!exp),零寬負向後行斷言來查找前綴exp不存在的位置:(?<![a-z])\d{7}匹配前面不是小寫字母的七位數字(實驗時發現錯誤?注意你的「區分大小寫」先項是否選中)。
一個更復雜的例子:(?<=<(\w+)>).*(?=<\/\1>)匹配不包含屬性的簡單HTML標簽內里的內容。(<?(\w+)>)指定了這樣的前綴:被尖括弧括起來的單詞(比如可能是<b>),然後是.*(任意的字元串),最後是一個後綴(?=<\/\1>)。注意後綴里的\/,它用到了前面提過的字元轉義;\1則是一個反向引用,引用的正是捕獲的第一組,前面的(\w+)匹配的內容,這樣如果前綴實際上是<b>的話,後綴就是</b>了。整個表達式匹配的是<b>和</b>之間的內容(再次提醒,不包括前綴和後綴本身)。
注釋:
小括弧的另一種用途是能過語法(?#comment)來包含注釋。例如:2[0-4]\d(?#200-249)|25[0-5](?#250-255)|[01]?\d\d?(?#0-199)。
要包含注釋的話,最好是啟用「忽略模式里的空白符」選項,這樣在編寫表達式時能任意的添加空格,Tab,換行,而實際使用時這些都將被忽略。啟用這個選項後,在#後面到這一行結束的所有文本都將被當成注釋忽略掉。
例如,我們可以前面的一個表達式寫成這樣:
(?<= # 查找前綴,但不包含它
<(\w+)> # 查找尖括弧括起來的字母或數字(標簽)
) # 前綴結束
.* # 匹配任意文本
(?= # 查找後綴,但不包含它
<\/\1> # 查找尖括弧括起來的內容:前面是一個"/",後面是先前捕獲的標簽
) # 後綴結束
貪婪與懶惰:
當正則表達式中包含能接受重復的限定符(指定數量的代碼,例如*,{5,12}等)時,通常的行為是(在使整個表達式能得到匹配的前提下)匹配盡可能多的字元。考慮這個表達式:a.*b,它將會匹配最長的以a開始,以b結束的字元串。如果用它來搜索aabab的話,它會匹配整個字元串aabab。這被稱為貪婪匹配。
有時,我們更需要懶惰匹配,也就是匹配盡可能少的字元。前面給出的限定符都可以被轉化為懶惰匹配模式,只要在它後面加上一個問號?。這樣.*?就意味著匹配任意數量的重復,但是在能使整個匹配成功的前提下使用最少的重復。現在看看懶惰版的例子吧:
a.*?b匹配最短的,以a開始,以b結束的字元串。如果把它應用於aabab的話,它會匹配aab和ab(為什麼第一個匹配是aab而不是ab?簡單地說,最先開始的區配最有最大的優先權——The Match That Begins Earliest Wins)。
表5.懶惰限定符 *? 重復任意次,但盡可能少重復
+? 重復1次或更多次,但盡可能少重復
?? 重復0次或1次,但盡可能少重復
{n,m}? 重復n到m次,但盡可能少重復
{n,}? 重復n次以上,但盡可能少重復
-------------------------------------------------------
下面是一些常用的正則表達式:
匹配中文字元的正則表達式: [\u4e00-\u9fa5]
評註:匹配中文還真是個頭疼的事,有了這個表達式就好辦了
匹配雙位元組字元(包括漢字在內):[^\x00-\xff]
評註:可以用來計算字元串的長度(一個雙位元組字元長度計2,ASCII字元計1)
匹配空白行的正則表達式:\n\s*\r
評註:可以用來刪除空白行
匹配HTML標記的正則表達式:<(\S*?)[^>]*>.*?</\1>|<.*? />
評註:網上流傳的版本太糟糕,上面這個也僅僅能匹配部分,對於復雜的嵌套標記依舊無能為力
匹配首尾空白字元的正則表達式:^\s*|\s*$
評註:可以用來刪除行首行尾的空白字元(包括空格、製表符、換頁符等等),非常有用的表達式
匹配Email地址的正則表達式:\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*
評註:表單驗證時很實用
匹配網址URL的正則表達式:[a-zA-z]+://[^\s]*
評註:網上流傳的版本功能很有限,上面這個基本可以滿足需求
匹配帳號是否合法(字母開頭,允許5-16位元組,允許字母數字下劃線):^[a-zA-Z][a-zA-Z0-9_]{4,15}$
評註:表單驗證時很實用
匹配國內電話號碼:\d{3}-\d{8}|\d{4}-\d{7}
評註:匹配形式如 0511-4405222 或 021-87888822
匹配騰訊QQ號:[1-9][0-9]{4,}
評註:騰訊QQ號從10000開始
匹配中國郵政編碼:[1-9]\d{5}(?!\d)
評註:中國郵政編碼為6位數字
匹配身份證:\d{15}|\d{18}
評註:中國的身份證為15位或18位
匹配ip地址:\d+\.\d+\.\d+\.\d+
評註:提取ip地址時有用
匹配特定數字:
^[1-9]\d*$ //匹配正整數
^-[1-9]\d*$ //匹配負整數
^-?[1-9]\d*$ //匹配整數
^[1-9]\d*|0$ //匹配非負整數(正整數 + 0)
^-[1-9]\d*|0$ //匹配非正整數(負整數 + 0)
^[1-9]\d*\.\d*|0\.\d*[1-9]\d*$ //匹配正浮點數
^-([1-9]\d*\.\d*|0\.\d*[1-9]\d*)$ //匹配負浮點數
^-?([1-9]\d*\.\d*|0\.\d*[1-9]\d*|0?\.0+|0)$ //匹配浮點數
^[1-9]\d*\.\d*|0\.\d*[1-9]\d*|0?\.0+|0$ //匹配非負浮點數(正浮點數 + 0)
^(-([1-9]\d*\.\d*|0\.\d*[1-9]\d*))|0?\.0+|0$ //匹配非正浮點數(負浮點數 + 0)
評註:處理大量數據時有用,具體應用時注意修正
匹配特定字元串:
^[A-Za-z]+$ //匹配由26個英文字母組成的字元串
^[A-Z]+$ //匹配由26個英文字母的大寫組成的字元串
^[a-z]+$ //匹配由26個英文字母的小寫組成的字元串
^[A-Za-z0-9]+$ //匹配由數字和26個英文字母組成的字元串
^\w+$ //匹配由數字、26個英文字母或者下劃線組成的字元串
評註:最基本也是最常用的一些表達式