SoFunction
Updated on 2025-03-01

Collection of commonly used regular expressions

Collection of commonly used regular expressions

Updated: June 11, 2015 09:17:14 Submission: hebedich
Regularity is too difficult to learn and easy to forget. Many friends who don’t know the rules often search online for a long time when they need to use regularity to verify data, but the results still do not meet the requirements. So I have recently sorted out some regular expressions commonly used in development and share them here. Make a record by yourself and give your friends a reference.

Collection of commonly used regular expressions

1.Verify the number:
Only input1Numbers

 
expression ^\d$ 
describe match一Numbers 
Matching examples 0,1,2,3 
不Matching examples 

2.Only inputnNumbers 
expression ^\d{n}$  For example^\d{8}$ 
describe match8Numbers 
Matching examples 12345678,22223334,12344321 
不Matching examples 


3.Only input至少nNumbers 
expression ^\d{n,}$ For example^\d{8,}$ 
describe match最少nNumbers 
Matching examples 12345678,123456789,12344321 
不Matching examples 


4.Only inputmarrivenNumbers 
expression ^\d{m,n}$ For example^\d{7,8}$ 
describe matchmarrivenNumbers 
Matching examples 12345678,1234567 
不Matching examples 123456,123456789


5.Only inputnumber 
expression ^[0-9]*$ 
describe match任意Numbers 
Matching examples 12345678,1234567 
不Matching examples E,Qingqing Yue'er


6.Only input某个区间number 
expression ^[12-15]$ 
describe match某个区间ofnumber 
Matching examples 12,13,14,15 
不Matching examples 


7.Only input0and non0The number that starts 
expression ^(0|[1-9][0-9]*)$ 
describe Can be0,第一Numbers不能为0,There can be any number in0 
Matching examples 12,10,101,100 
不Matching examples 01,Qingqing Yue'er,/21aspnet


8.Only input实数 
expression ^[-+]?\d+(\.\d+)?$ 
describe match实数 
Matching examples 18,+3.14,-9.90 
不Matching examples .6,33s,67-99


9.Only inputnPositive real number of decimal places 
expression ^[0-9]+(.[0-9]{n})?$by^[0-9]+(.[0-9]{2})?$As an example 
describe matchnPositive real number of decimal places 
Matching examples 2.22 
不Matching examples 2.222,-2.22,/21aspnet


10.Only inputm-nPositive real number of decimal places 
expression ^[0-9]+(.[0-9]{m,n})?$by^[0-9]+(.[0-9]{1,2})?$As an example 
describe matchmarrivenPositive real number of decimal places 
Matching examples 2.22,2.2 
不Matching examples 2.222,-2.2222,/21aspnet


11.Only input非0Positive integer 
expression ^\+?[1-9][0-9]*$ 
describe match非0Positive integer 
Matching examples 2,23,234 
不Matching examples 0,-4,


12.Only input非0Negative integers 
expression ^\-[1-9][0-9]*$ 
describe match非0Negative integers 
Matching examples -2,-23,-234 
不Matching examples 0,4,


13.Only inputnCharacters 
expression ^.{n}$ by^.{4}$As an example 
describe matchnCharacters,Note that Chinese characters are counted only1Characters 
Matching examples 1234,12we,123clear,Qingqing Yue'er 
不Matching examples 0,123,123www,/21aspnet/


14.Only input英文字符 
expression ^.[A-Za-z]+$As an example 
describe match英文字符,Arbitrary case 
Matching examples Asp,WWW, 
不Matching examples 0,123,123www,/21aspnet/


15.Only input大写英文字符 
expression ^.[A-Z]+$As an example 
describe match英文大写字符 
Matching examples NET,WWW, 
不Matching examples 0,123,123www,


16.Only input小写英文字符 
expression ^.[a-z]+$As an example 
describe match英文大写字符 
Matching examples asp,csdn 
不Matching examples 0,NET,WWW,


17.Only input英文字符+number 
expression ^.[A-Za-z0-9]+$As an example 
describe match英文字符+number 
Matching examples 1Asp,W1W1W, 
不Matching examples 0,123,123,www,/21aspnet/


18.Only input英文字符/number/Underline 
expression ^\w+$As an example 
describe match英文字符或number或Underline 
Matching examples 1Asp,WWW,12,1_w 
不Matching examples 3#,2-4,w#$,/21aspnet/


19.Example password 
expression ^.[a-zA-Z]\w{m,n}$ 
describe match英文字符开头ofm-nBit字符且只能number字母或Underline 
Matching examples 
不Matching examples 


20.Verify the capital letter 
expression \b[^\Wa-z0-9_][^\WA-Z0-9_]*\b 
describe The first letter can only be capitalized 
Matching examples Asp,Net 
不Matching examples /21aspnet/


21.Verify the URL(bring?id=Chinese)VS.NET2005No such function 
expression ^http:\/\/([\w-]+(\.[\w-]+)+(\/[\w-   .\/\?%&=\u4e00-\u9fa5]*)?)?$
 
describe verifybring?id=Chinese 
Matching examples /21aspnet/,
?id=Qingqing Yue'er 
不Matching examples 


22.Verify Chinese characters 
expression ^[\u4e00-\u9fa5]{0,}$ 
describe Only Chinese characters 
Matching examples Qingqing Yue'er 
不Matching examples /21aspnet/


23.verifyQQNumber 
expression [0-9]{5,9} 
describe 5-9A bitQQNumber 
Matching examples 10000,123456 
不Matching examples 10000w,/21aspnet/


24.verify电子邮件(verifyMSNNumber一样) 
expression \w+([-+.']\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)* 
describe NoticeMSN用非邮箱也可by 
Matching examples aaa@ 
不Matching examples 111@1.   /21aspnet/


25.verify身份证Number(Rough test,最好服务器端调类库再细verify) 
expression ^[1-9]([0-9]{16}|[0-9]{13})[xX0-9]$ 
describe 
Matching examples 15or18A bit身份证Number,支持bringXof 
不Matching examples /21aspnet/


26.verify手机Number(Include159,不Include小灵通) 
expression ^13[0-9]{1}[0-9]{8}|^15[9]{1}[0-9]{8} 
describe Include159of手机Number130-139 
Matching examples 139XXXXXXXX 
不Matching examples 140XXXXXXXX,/21aspnet/


27.verify电话Number码Number(Very complicated,VS.NET2005给of是错of) 
expression(Improper) Plan 1  ((\(\d{3}\)|\d{3}-)|(\(\d{4}\)|\d{4}-))?(\d{8}|\d{7})
Plan 2 (^[0-9]{3,4}\-[0-9]{3,8}$)|(^[0-9]{3,8}$)|(^\([0-9]{3,4}\)[0-9]{3,8}$)|(^0{0,1}13[0-9]{9}$)  支持手机Number但也Improper 
describe Shanghai:02112345678   3+8Bit
Shanghai:021-12345678
Shanghai:(021)-12345678
Shanghai:(021)12345678
Zhengzhou:03711234567    4+7Bit
Hangzhou:057112345678    4+8Bit
还有bring上分机Number,国家码of情况
由于情况非常复杂所by不建议前台做100%verify,arrive目前为止似乎也没有谁能写一个Include所有of类型,其实有很多情况本身就是矛盾of。
如果谁有更好ofverify电话of请留言
 
Matching examples 
不Matching examples 


28.verify护照 
expression (P\d{7})|G\d{8})
 
describe verifyP+7NumbersandG+8Numbers 
Matching examples 
不Matching examples Qingqing Yue'er,/21aspnet/


29.verifyIP 
expression ^(25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[1-9])\.(25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[1-9]|0)\.(25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[1-9]|0)\.(25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[0-9])$
 
describe verifyIP 
Matching examples 192.168.0.1   222.234.1.4 
不Matching examples 


30.verify域 
expression ^[a-zA-Z0-9]+([a-zA-Z0-9\-\.]+)?\.s|)$
 
describe verify域 
Matching examples       
不Matching examples 192.168.0.1 


31.verify信用Card 
expression ^((?:4\d{3})|(?:5[1-5]\d{2})|(?:6011)|(?:3[68]\d{2})|(?:30[012345]\d))[ -]?(\d{4})[ -]?(\d{4})[ -]?(\d{4}|3[4,7]\d{13})$
 
describe verifyVISACard,万事达Card,DiscoverCard,美国运通Card 
Matching examples 
不Matching examples 


32.verifyISBN国际标准书Number 
expression ^(\d[- ]*){9}[\dxX]$
 
describe verifyISBN国际标准书Number 
Matching examples 7-111-19947-2 
不Matching examples 


33.verifyGUIDGlobally unique identifier 
expression ^[A-Z0-9]{8}-[A-Z0-9]{4}-[A-Z0-9]{4}-[A-Z0-9]{4}-[A-Z0-9]{12}$
 
describe Format8-4-4-4-12 
Matching examples 2064d355-c0b9-41d8-9ef7-9d8b26524751 
不Matching examples 


34.verify文件路径and扩展名 
expression ^([a-zA-Z]\:|\\)\\([^\\]+\\)*[^\/:*?"<>|]+\.txt(l)?$
 
describe Check paths and file extensions 
Matching examples E:\ 
不Matching examples E:\ , , E:\ ,/21aspnet/


35.verifyHtmlColor value 
expression ^#?([a-f]|[A-F]|[0-9]){3}(([a-f]|[A-F]|[0-9]){3})?$
 
describe Check the color value 
Matching examples #FF0000 
不Matching examples /21aspnet/

^[1-9]\d*\.\d*|0\.\d*[1-9]\d*$

Integeror小数:^[0-9]+\.{0,1}[0-9]{0,2}$ 
Only inputnumber:"^[0-9]*$"。 
Only inputnA bitnumber:"^\d{n}$".
 Only numbers with at least n digits can be entered: "^\d{n,}$".
 Only numbers in m~n are entered:.  "^\d{m,n}$"
 Only numbers starting with zero and non-zero are entered: "^(0|[1-9][0-9]*)$".
 Only positive real numbers with two decimal places can be entered: "^[0-9]+(.[0-9]{2})?$".
 Only positive real numbers with 1 to 3 decimal places can be entered: "^[0-9]+(.[0-9]{1,3})?$".
 Only non-zero positive integers can be entered: "^\+?[1-9][0-9]*$".
 Only non-zero negative integers can be entered:"^\-[1-9][]0-9"*$.
 Only characters with length 3 can be entered:"^.{3}$".
 Only strings composed of 26 English letters can be entered: "^[A-Za-z]+$".
 Only strings composed of 26 capital English letters can be entered: "^[A-Z]+$".
 Only strings composed of 26 lowercase English letters can be entered: "^[a-z]+$".
 Only strings composed of numbers and 26 English letters can be entered: "^[A-Za-z0-9]+$".
 Only strings composed of numbers, 26 English letters, or underscores can be entered: "^\w+$".
 Verify user password:"^[a-zA-Z]\w{5,17}$"正确Format为:by字母开头,The length is6~18between,只能Include字符、numberandUnderline。 
verify是否含有^%&',;=?$\"Equal Characters:"[^%&',;=?$\x22]+".
 Only enter Chinese characters: "^[\u4e00-\u9fa5]{0,}$"
 Verify the email address: "^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$".
 Verify Internet URL:"^http://([\w-]+\.)+[\w-]+(/[\w-./?%&=]*)?$".
 Verify phone number:"^(\(\d{3,4}-)|\d{3.4}-)?\d{7,8}$"The correct format is:"XXX-XXXXXXX"、"XXXX-XXXXXXXX"、"XXX-XXXXXXX"、"XXX-XXXXXXXX"、"XXXXXXX"and"XXXXXXXX".
 Verify ID number (15 or 18 digits):"^\d{15}|\d{18}$".
 Verify 12 months of one year:"^(0?[1-9]|1[0-2])$"The correct format is:"01"~"09"and"1"~"12".
 Verification for 31 days in one month:"^((0?[1-9])|((1|2)[0-9])|30|31)$"The correct format is;"01"~"09"and"1"~"31"。 
matchChinese字符of正则expression: [\u4e00-\u9fa5] 

match双字节字符(Including Chinese characters):[^\x00-\xff] 

application:计算字符串of长度(A double-byte character length meter2,ASCIICharacter meter1) 
=function(){return (/[^\x00-\xff]/g,"aa").length;} 

match空行of正则expression:\n[\s| ]*\r 

matchhtml标签of正则expression:<(.*)>(.*)<\/(.*)>|<(.*)\/> 

match首尾空格of正则expression:(^\s*)|(\s*$) 

application:javascriptNothing likevbscript那样oftrimfunction,我们就可by利用这个expression来实现,as follows: 

 = function() 
{ 
return (/(^\s*)|(\s*$)/g, ""); 
} 

利用正则expression分解and转换IPaddress: 

下面是利用正则expressionmatchIPaddress,AndIPaddress转换成对应数值ofJavascriptprogram: 

function IP2V(ip) 
{ 
re=/(\d+)\.(\d+)\.(\d+)\.(\d+)/g // Regular expression matching IP addressif((ip)) 
{ 
return RegExp.$1*(255,3))+RegExp.$2*(255,2))+RegExp.$3*255+RegExp.$4*1 
} 
else 
{ 
throw new Error("Not a valid IP address!") 
} 
} 

不过上面ofprogram如果不用正则expression,And use it directlysplitfunction来分解可能更简单,programas follows: 

var ip="10.100.20.168" 
ip=(".") 
alert("IP value is:"+(ip[0]*255*255*255+ip[1]*255*255+ip[2]*255+ip[3]*1)) 

matchEmailaddressof正则expression:\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)* 

match网址URLof正则expression:http://([\w-]+\.)+[\w-]+(/[\w- ./?%&=]*)? 


利用正则expression限制网页表单里of文本框输入内容: 

用正则expression限制Only inputChinese:onkeyup="value=(/[^\u4E00-\u9FA5]/g,'')" onbeforepaste="('text',('text').replace(/[^\u4E00-\u9FA5]/g,''))" 

用正则expression限制Only input全角字符: onkeyup="value=(/[^\uFF00-\uFFFF]/g,'')" onbeforepaste="('text',('text').replace(/[^\uFF00-\uFFFF]/g,''))" 

用正则expression限制Only inputnumber:onkeyup="value=(/[^\d]/g,'') "onbeforepaste="('text',('text').replace(/[^\d]/g,''))"

用正则expression限制Only inputnumberand英文:onkeyup="value=(/[\W]/g,'') "onbeforepaste="('text',('text').replace(/[^\d]/g,''))"

<input onkeyup="value=(/[^\u4E00-\u9FA5\w]/g,'')" onbeforepaste="('text',('text').replace(/[^\u4E00-\u9FA5\w]/g,''))" value="Underlines, numeric letters and Chinese characters are allowed">

<script language="javascript"> 
if ()// Trigger the keyboard event() 

function xz(thsv,nob){ 
if(nob=="2"){ 
("text","") 
alert("Avoid illegal character input, please do not copy characters"); 
return false; 
} 
if (!=8 && !=16 && !=37 && !=38 && !=39 && !=40){ 
thsvv=;//Input valuethsvs=(-1);//The last character entered//thsvss=(0,-1);//Remove the last wrong characterif (!(/[^\u4E00-\u9FA5\w]/g,'') || ==189){//Regularly remove symbols and underscores='Do not enter illegal symbols ['+thsvs+']'; 
alert('Do not enter illegal symbols ['+thsvs+']'); 
=""; 
return false; 
} 
} 
} 

</script> 

<input onkeyup="xz(this,1)" onPaste="xz(this,2)" value="">允许number字母and汉字

<script language="javascript"> 
<!-- 
function MaxLength(field,maxlimit){ 
var j = (/[^\x00-\xff]/g,"**").length; 
//alert(j); 
var tempString=; 
var tt=""; 
if(j > maxlimit){ 
for(var i=0;i<maxlimit;i++){ 
if((/[^\x00-\xff]/g,"**").length < maxlimit) 
tt = (0,i+1); 
else 
break; 
} 
if((/[^\x00-\xff]/g,"**").length > maxlimit) 
tt=(0,-1); 
 = tt; 
}else{ 
; 
} 
} 
</script>

Single line text box control<br /> 
<INPUT type="text"  name="Text1" onpropertychange="MaxLength(this, 5)"><br /> 
Multi-line text box control:<br /> 
<TEXTAREA rows="14" 
cols="39"  name="Textarea1" onpropertychange="MaxLength(this, 15)"></TEXTAREA><br />

控制表单内容Only inputnumber,Chinese.... 
<script> 
function test()  
{ 
if(>50) 
{ 
alert("No more than 50 characters!"); 
(); 
return false; 
} 
} 
</script> 
<form name=a onsubmit="return test()"> 
<textarea name="b" cols="40" wrap="VIRTUAL" rows="6"></textarea> 
<input type="submit" name="Submit" value="check"> 
</form> 

Only Chinese characters 
<input onkeyup="value=(/[^\u4E00-\u9FA5]/g,'')"> 

Only English characters 
<script language=javascript> 
function onlyEng() 
{ 
if(!(>=65&&<=90)) 
  =false; 
} 
</script> 

<input onkeydown="onlyEng();"> 
<input name="coname" type="text" size="50" maxlength="35" class=input2 onkeyup="value=(/[\W]/g,'') "onbeforepaste="('text',('text').replace(/[^\d]/g,''))"> 
只能是number 
<script language=javascript> 
function onlyNum() 
{ 
if(!((>=48&&<=57)||(>=96&&<=105))) 
//Consider the numeric keys on the keyboard  =false; 
} 
</script> 

<input onkeydown="onlyNum();"> 

Only English charactersandnumber 
<input onkeyup="value=(/[\W]/g,'') "onbeforepaste="('text',('text').replace(/[^\d]/g,''))"> 

verify为emailFormat 
<SCRIPT LANGUAGE=Javascript RUNAT=Server> 
function isEmail(strEmail) { 
if ((/^\w+((-\w+)|(\.\w+))*\@[A-Za-z0-9]+((\.|-)[A-Za-z0-9]+)*\.[A-Za-z0-9]+$/) != -1) 
return true; 
else 
alert("oh"); 
} 
</SCRIPT> 
<input type=text onblur=isEmail()> 

Block keywords(sex , fuck) - Modified 
<script language="JavaScript1.2"> 
function test() { 
if(( ("sex") == 0)||( ("fuck") == 0)){ 
  alert("Five talks, four beauties, and three loves"); 
  (); 
  return false;} 
} 
</script> 
<form name=a onsubmit="return test()"> 
<input type=text name=b> 
<input type="submit" name="Submit" value="check"> 
</form> 


限制文本框里Only inputnumber 
<input onkeyup="if( !=37 &&  != 39) value=(/\D/g,'');"onbeforepaste="('text',('text').replace(/\D/g,''))"> 

 手机Number码:(^(\d{3,4}-)?\d{7,8})$|(13[0-9]{9})|(15[8-9]{9})

不会of也可by根据上面介绍of写出来了吧,Just take some time。

 

Verify the numberof正则expression集 
Verify the number:^[0-9]*$
verifynA bitnumber:^\d{n}$
verify至少nBitnumber:^\d{n,}$
verifym-nA bitnumber:^\d{m,n}$
verify零and non零开头ofnumber:^(0|[1-9][0-9]*)$
verify有两Positive real number of decimal places:^[0-9]+(.[0-9]{2})?$
verify有1-3Positive real number of decimal places:^[0-9]+(.[0-9]{1,3})?$
verify非零Positive integer:^\+?[1-9][0-9]*$
verify非零Negative integers:^\-[1-9][0-9]*$
verify非Negative integers(Positive integer + 0) ^\d+$
verify非Positive integer(Negative integers + 0) ^((-\d+)|(0+))$
verify长度为3of字符:^.{3}$
verify由26个英文字母组成of字符串:^[A-Za-z]+$
verify由26个大写英文字母组成of字符串:^[A-Z]+$
verify由26个小写英文字母组成of字符串:^[a-z]+$
verify由numberand26个英文字母组成of字符串:^[A-Za-z0-9]+$
verify由number、26个英文字母orUnderline组成of字符串:^\w+$
verify用户密码:^[a-zA-Z]\w{5,17}$ 正确Format为:by字母开头,The length is6-18between,只能Include字符、numberandUnderline。
verify是否含有 ^%&',;=?$\" Equal characters:[^%&',;=?$\x22]+
Verify Chinese characters:^[\u4e00-\u9fa5],{0,}$
verifyEmailaddress:^\w+[-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$
verifyInternetURL:^http://([\w-]+\.)+[\w-]+(/[\w-./?%&=]*)?$ ;^[a-zA-z]+://(w+(-w+)*)(.(w+(-w+)*))*(?S*)?$
verify电话Number码:^(\(\d{3,4}\)|\d{3,4}-)?\d{7,8}$:--正确Format为:XXXX-XXXXXXX,XXXX-XXXXXXXX,XXX-XXXXXXX,XXX-XXXXXXXX,XXXXXXX,XXXXXXXX。
verify身份证Number(15Bit或18Bitnumber):^\d{15}|\d{}18$
verify一年of12Months:^(0?[1-9]|1[0-2])$ 正确Format为:“01”-“09”and“1”“12”
verify一Monthsof31sky:^((0?[1-9])|((1|2)[0-9])|30|31)$  正确Format为:01、09and1、31。
Integer:^-?\d+$
Non-negative floating point number(Positive floating point number + 0):^\d+(\.\d+)?$
Positive floating point number  ^(([0-9]+\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\.[0-9]+)|([0-9]*[1-9][0-9]*))$
非Positive floating point number(Negative floating point number + 0) ^((-\d+(\.\d+)?)|(0+(\.0+)?))$
Negative floating point number ^(-(([0-9]+\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\.[0-9]+)|([0-9]*[1-9][0-9]*)))$
Floating point number ^(-?\d+)(\.\d+)?

The above is the commonly used regular expressions summarized by this article. I hope it will be helpful for everyone to learn regular expressions.

  • Regular expressions

Related Articles

  • Recommend a website to collect and organize regular expressions

    I recommend a website to collect and organize regular expressions...
    2007-04-04
  • Character group of regular expressions [ ](Character Classes)

    Character groups are one of the most basic structures of regular expressions. Here I will introduce the correct way to use character groups []. Friends who need them can refer to it.
    2023-05-05
  • Analysis of the method of regular matching Chinese between php and javascript

    This article mainly introduces the method of regular matching of php and javascript in Chinese. It analyzes the Chinese operation techniques for regular matching of php and javascript in UTF-8 and GBK encoding in combination with examples. Friends who need it can refer to it.
    2017-03-03
  • Getting started with basic regular expressions

    This article mainly introduces a detailed introduction to the basics of regular expression learning article. Friends in need can refer to it for reference. I hope it can be helpful. I wish you more progress and get a promotion as soon as possible.
    2023-03-03
  • Detailed explanation of seven usage examples of Python regular expressions

    This article is part of a series of articles on Python regular expressions. In the first post in this series, we will focus on how to use regular expressions in Python and highlight some unique features in Python
    2014-08-08
  • Introduction to capture group/non-capture group of regular expressions

    After specifying a subexpression with brackets, the text matching the subexpression (that is, the content captured by this group) can be further processed in the expression or other programs.
    2011-08-08
  • Regular expressions that can write 1000 lines of code less

    Regular expressions, a very ancient and powerful text processing tool, can quickly implement a very complex business logic with just a very short expression statement. Knowing these 20 regular expressions can help you write 1,000 lines of code less. Do you want to know
    2016-04-04
  • Share a set of open source regular expressions matching mobile phone numbers in mainland China

    This article mainly introduces sharing a set of open source regular expressions matching Chinese mobile phone numbers. The article introduces the sample code in detail, which has a certain reference learning value for everyone's study or work. If you need it, please follow the editor to study together.
    2019-06-06
  • Regular expression online testing tool

    Mengchi online test regular expression
    2008-10-10
  • Regular expression operator priority introduction

    Regular expressions are calculated from left to right and follow the order of priority, which is very similar to arithmetic expressions
    2016-05-05

Latest Comments