Maison > interface Web > js tutoriel > Résumé de la syntaxe de base des expressions régulières js

Résumé de la syntaxe de base des expressions régulières js

零到壹度
Libérer: 2018-03-28 14:46:21
original
1915 Les gens l'ont consulté

Cet article partage principalement avec vous un résumé de la syntaxe de base des expressions régulières js. Il a une bonne valeur de référence et j'espère qu'il sera utile à tout le monde. Suivons l’éditeur et jetons un coup d’œil.

1. Syntaxe de base des expressions régulières

Deux symboles spéciaux '^' et '$'. Leur fonction est d'indiquer respectivement le début et la fin d'une chaîne.

Les exemples sont les suivants :

"^The" : représente toutes les chaînes commençant par "The" ("Là", "Le chat", etc.) ; "of despair$" : représente une chaîne qui se termine par "of despair" ;

"^abc$" : représente une chaîne qui commence et se termine par "abc" - haha, il n'y a que "abc" lui-même . ;

"notice": Représente toute chaîne contenant "notice".

Comme le dernier exemple, si vous n'utilisez pas deux caractères spéciaux, vous indiquez que la chaîne que vous souhaitez trouver fait partie de la chaîne recherchée - vous ne la

la positionnez en haut d'un certain.


D'autres symboles incluent « * », « + » et « ? », qui représentent le nombre de fois qu'un caractère ou une séquence de caractères apparaît de manière répétée.

Ils signifient respectivement "aucun ou plus", "une ou plusieurs" et "aucun ou une fois".


Voici quelques exemples :

"ab*" : Indique qu'une chaîne a un a suivi de zéro ou de plusieurs b. ("a", "ab", "abbb",...);

"ab+" : Indique qu'une chaîne a un a suivi d'au moins un b ou plus ; " ab?" : Indique qu'une chaîne a un a suivi de zéro ou un b

"a?b+$" : Indique qu'il y a zéro ou un a suivi d'un ou plusieurs b à la fin de la chaîne.

Vous pouvez également utiliser des plages, entre accolades, pour indiquer la plage de répétitions.

"ab{2}" : Indique qu'une chaîne a un a suivi de 2 b ("abb");

"ab{2,}" : Indique qu'une chaîne a un a suivi de au moins 2 b;

"ab{3,5}" : Indique qu'une chaîne a un a suivi de 3 à 5 b.

Veuillez noter que vous devez préciser la limite inférieure de la plage (ex : "{0,2}" au lieu de "{,2}").

De plus, vous avez peut-être remarqué que '*', '+' et '?' sont équivalents à "{0,}", "{1,}" et "{0,1}".

Il y a aussi un '¦', qui signifie opération « ou » :

« salut¦hello » : signifie qu'il y a « salut » ou « bonjour » dans une chaîne

;

"(b¦cd)ef": signifie "bef" ou "cdef"

"(a¦b)*c": signifie une chaîne de chaînes mixtes de "a" et "b" " suivi de A "c";

'.' peut remplacer n'importe quel caractère :

"a.[0-9]" : indique qu'une chaîne a un "a" suivi d'un caractère arbitraire et un nombre ;

"^.{3}$" : indique une chaîne de trois caractères quelconques (la longueur est de 3 caractères

Les crochets indiquent que certains caractères sont autorisés) ; in a Apparaît à une position spécifique dans la chaîne :

"[ab]" : indique qu'une chaîne a un "a" ou un "b" (équivalent à "a¦b"); 🎜 >"[a-d]" : indique qu'une chaîne contient de 'a' à 'd' minuscules (équivalent à "a¦b¦c¦d" ou "[abcd]"); ^[a-zA-Z]" : représente une chaîne commençant par une lettre ;

"[0-9]%" : représente un nombre précédé d'un signe pour cent ;

",[a-zA-Z0-9]$" : Indique qu'une chaîne se termine par une virgule suivie d'une lettre ou d'un chiffre.

Vous pouvez également utiliser « ^ » entre crochets pour indiquer que les caractères indésirables « ^ » doivent être le premier entre crochets.

(par exemple : "%[^a-zA-Z]%" signifie que les lettres ne doivent pas apparaître entre les signes de deux pour cent).

Afin de l'exprimer textuellement, vous devez ajouter le caractère d'échappement '' avant ces caractères "^.$()¦*+?{".

Veuillez noter qu'entre crochets, aucun caractère d'échappement n'est requis.

2. La vérification des expressions régulières contrôle le type de caractère saisi dans la zone de texte

1. :

<input onkeyup="value=value.replace(/[\W]/g,&#39;&#39;) "
 onbeforepaste="clipboardData.setData(&#39;text&#39;,clipboardData.getData(&#39;text&#39;).replace(/[^\d]/g,&#39;&#39;))" 
 ID="Text1" 
 NAME="Text1">
Copier après la connexion

2. Seuls les chiffres peuvent être saisis :

<input onkeyup="value=value.replace(/[^\d]/g,&#39;&#39;) " 
onbeforepaste="clipboardData.setData(&#39;text&#39;,clipboardData.getData(&#39;text&#39;).replace(/[^\d]/g,&#39;&#39;))" 
ID="Text2" 
NAME="Text2">
Copier après la connexion

3.


<input onkeyup="value=value.replace(/[^\uFF00-\uFFFF]/g,&#39;&#39;)" 
onbeforepaste="clipboardData.setData(&#39;text&#39;,clipboardData.getData(&#39;text&#39;).replace(/[^\uFF00-\uFFFF]/g,&#39;&#39;))" 
ID="Text3" 
NAME="Text3">
Copier après la connexion

4. Seuls les caractères chinois peuvent être saisis :

<input onkeyup="value=value.replace(/[^\u4E00-\u9FA5]/g,&#39;&#39;)" 
onbeforepaste="clipboardData.setData(&#39;text&#39;,clipboardData.getData(&#39;text&#39;).replace(/[^\u4E00-\u9FA5]/g,&#39;&#39;))" 
ID="Text4" 
NAME="Text4">
Copier après la connexion

<🎜. >3. Expression régulière Explication populaire des exemples d'application de la formule

************************ ********** **************************************** *********

//Vérifiez si tout est composé de chiffres

/^[0-9]{1,20}$/


^ signifie que les caractères principaux doivent correspondre et suivre la règle après ^

$ signifie que le caractère de départ doit correspondre à la règle

[ ] immédiatement avant $. est le jeu de caractères facultatif

[0-9] Indique que la plage de caractères requise est comprise entre 0 et 9

{1,20} signifie que la longueur légale de la chaîne numérique est de 1 à 20, c'est-à-dire que la plage du nombre d'occurrences des caractères entre [0-9] est de 1 à 20 fois.

/^ et $/ doivent être utilisés par paires pour indiquer que la chaîne entière doit correspondre complètement à la règle définie, plutôt que de correspondre uniquement à une sous-chaîne de la chaîne.

****************************************** ******* **************************************

//Vérifier le nom de connexion : Seules 5 à 20 chaînes commençant par des lettres et contenant des chiffres, "_" et "." peuvent être saisies

/^[a-zA-Z]{1}([ a-zA- Z0-9]|[._]){4,19}$/

^[a-zA-Z]{1} signifie que le premier caractère doit être une lettre.

([a-zA-Z0-9]|[._]){4,19} signifie partir du deuxième chiffre (car il suit immédiatement l'expression précédente) d'une longueur de 4. Une chaîne de jusqu'à 9 caractères, qui doivent être composés de lettres majuscules et minuscules, de chiffres ou du jeu de caractères spécial [._].

****************************************** ******* **************************************

//Vérifier le nom d'utilisateur : Seules 1 à 30 chaînes commençant par des lettres peuvent être saisies

/^[a-zA-Z]{1,30}$/

** ******************************************** ****** **************************

//Mot de passe de vérification : seulement 6- 20 lettres peuvent être saisies, des chiffres, des traits de soulignement

/^(w){6,20}$/

w : utilisé pour faire correspondre des lettres, des chiffres ou des caractères de soulignement

*************************************** ******* ********************************

/ /Vérifiez le numéro de téléphone et le numéro de fax ordinaires : il peut commencer par "+" ou un numéro et contenir "-" et " "

/^[+]{0,1}(d ){1,3}[ ]?([ -]?((d)|[ ]){1,12})+$/

d : utilisé pour faire correspondre les nombres de 0 à 9 ;

“?”元字符规定其前导对象必须在目标对象中连续出现零次或一次

可以匹配的字符串如:+123 -999 999 ; +123-999 999 ;123 999 999 ;+123 999999等

*******************************************************************************
//校验URL

/^http[s]{0,1}:\/\/.+$/ 或 /^http[s]{0,1}:\/\/.{1,n}$/ (表示url串的长度为length(“https://”) + n )
\ / :表示字符“/”。

. 表示所有字符的集

+ 等同于{1,},就是1到正无穷吧。

*******************************************************************************

//校验纯中文字符
/

^[\u4E00-\u9FA5]+$/

[\u4E00-\u9FA5] :估计是中文字符集的范围吧

以上表达式均在下面的javascript中测试通过


<html>
<script language="JavaScript">
<!--
function regx(r,s)
{
    if (r == null || r == ""){
       return false;
    }
    var patrn= new RegExp(r);
    if (patrn.exec(s))
       return true
    return false
}
 
-->
</script>
<body>
<form>
Copier après la connexion

规则表达式 :


 <input type="input" name="regxStr" value="" > (填写/ /之间的表达式)
<br>
Copier après la connexion

校验字符串 :

 <input type="input" name="str" value="" >
    <input type="button" name="match" value="匹配" onClick="alert(regx(regxStr.value,str.value));">
</form>
</body>
</html>
Copier après la connexion

4.正則表達式應用

"^\d+$"  //非负整数(正整数 + 0)

"^[0-9]*[1-9][0-9]*$"  //正整数

"^((-\d+)|(0+))$"  //非正整数(负整数 + 0)

"^-[0-9]*[1-9][0-9]*$" //Entier négatif

"^-?d+$" //Entier

"^d+(.d+)?$" //Nombre à virgule flottante non négatif (nombre à virgule flottante positif + 0)

"^(([0-9 ]+ [0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*.[0-9]+)|( [0- 9]*[1-9][0-9]*))$" //Nombre à virgule flottante positif

"^((-d+(.d+)?)|( 0+(. 0+)?))$" //Nombre à virgule flottante non positif (nombre à virgule flottante négatif + 0)

"^(-(([0-9]+. [0-9]*[ 1-9][0-9]*)|([0-9]*[1-9][0-9]*.[0-9]+)|([0- 9]*[1-9 ][0-9]*)))$" //Nombre à virgule flottante négatif

"^(-?d+)(.d+)?$" // Nombre à virgule flottante

"^[A-Za-z]+$" //Une chaîne composée de 26 lettres anglaises

"^[A-Z]+$" //Une chaîne composée de 26 lettres anglaises Une chaîne composée de lettres majuscules

"^[a-z]+$" // Une chaîne composée de 26 lettres anglaises minuscules

"^[A- Za-z0-9]+$" // Une chaîne composée de chiffres et de 26 lettres anglaises

"^w+$" // Une chaîne de caractères composée de chiffres, 26 Lettres anglaises ou traits de soulignement Chaîne

"^[w-]+(.[w-]+)*@[w-]+(.[w-]+)+$" //email adresse

"^[a-zA-z]+://(w+(-w+)*)(.(w+(-w+)*))*(?S*)?$ "  //url

/^(d{2}|d{4})-((0([1-9]{1}))|(1[1|2]) )-(( [0-2]([1-9]{1}))|(3[0|1]))$/ // Année-mois-jour

/^ ((0( [1-9]{1}))|(1[1|2]))/(([0-2]([1-9]{1}))|(3[0|1 ]))/ (d{2}|d{4})$/ // mois/jour/année

"^([w-.]+)@(([[0- 9]{1 ,3}.[0-9]{1,3}.[0-9]{1,3}.)|(([w-]+.)+))([a-zA- Z]{2 ,4}|[0-9]{1,3})(]?)$" //Émile

"(d+-)?(d{4}-?d{7}|d{3}-?d{8}|^d{7,8})(-d+)?" //电话号码

"^(d{1,2}|1dd|2[0-4]d|25[0-5]).(d{1,2}|1dd|2[0-4]d|25[0-5]).(d{1,2}|1dd|2[0-4]d|25[0-5]).(d{1,2}|1dd|2[0-4]d|25[0-5])$" //IP地址

^([0-9A-F]{2})(-[0-9A-F]{2}){5}$ //MAC地址的正则表达式

^[-+]?\d+(\.\d+)?$ //值类型正则表达式

5.javascript正则表达式检验

//校验是否全由数字组成


function isDigit(s)
{
var patrn=/^[0-9]{1,20}$/;
if (!patrn.exec(s)) return false
return true
}
Copier après la connexion

//校验登录名:只能输入5-20个以字母开头、可带数字、“_”、“.”的字串

function isRegisterUserName(s)
{
var patrn=/^[a-zA-Z]{1}([a-zA-Z0-9]|[._]){4,19}$/;
if (!patrn.exec(s)) return false
return true
}
Copier après la connexion

//校验用户姓名:只能输入1-30个以字母开头的字串

function isTrueName(s)
{
var patrn=/^[a-zA-Z]{1,30}$/;
if (!patrn.exec(s)) return false
return true
}
Copier après la connexion

//校验密码:只能输入6-20个字母、数字、下划线

function isPasswd(s)
{
var patrn=/^(\w){6,20}$/;
if (!patrn.exec(s)) return false
return true
}
Copier après la connexion

//校验普通电话、传真号码:可以“+”开头,除数字外,可含有“-”

function isTel(s)
{
//var patrn=/^[+]{0,1}(\d){1,3}[ ]?([-]?(\d){1,12})+$/;
var patrn=/^[+]{0,1}(\d){1,3}[ ]?([-]?((\d)|[ ]){1,12})+$/;
if (!patrn.exec(s)) return false
return true
}
Copier après la connexion

//校验手机号码:必须以数字开头,除数字外,可含有“-”

function isMobil(s)
{
var patrn=/^[+]{0,1}(\d){1,3}[ ]?([-]?((\d)|[ ]){1,12})+$/;
if (!patrn.exec(s)) return false
return true
}
Copier après la connexion

//校验邮政编码

function isPostalCode(s)
{
//var patrn=/^[a-zA-Z0-9]{3,12}$/;
var patrn=/^[a-zA-Z0-9 ]{3,12}$/;
if (!patrn.exec(s)) return false
return true
}
Copier après la connexion

//校验搜索关键字

function isSearch(s)
{
var patrn=/^[^`~!@#$%^&*()+=|\\\][\]\{\}:;\&#39;\,.<>/?]{1}[^`~!@$%^&()+=|\\\][\]\{\}:;\&#39;\,.<>?]{0,19}$/;
if (!patrn.exec(s)) return false
return true
}
function isIP(s) //by zergling
{
var patrn=/^[0-9.]{1,20}$/;
if (!patrn.exec(s)) return false
return true
}
 
/*********************************************************************************
* FUNCTION: isBetween
* PARAMETERS: val AS any value
* lo AS Lower limit to check
* hi AS Higher limit to check
* CALLS: NOTHING
* RETURNS: TRUE if val is between lo and hi both inclusive, otherwise false.
**********************************************************************************/
function isBetween (val, lo, hi) {
if ((val < lo) || (val > hi)) { return(false); }
else { return(true); }
}
/*********************************************************************************
* FUNCTION: isDate checks a valid date
* PARAMETERS: theStr AS String
* CALLS: isBetween, isInt
* RETURNS: TRUE if theStr is a valid date otherwise false.
**********************************************************************************/
function isDate (theStr) {
var the1st = theStr.indexOf(&#39;-&#39;);
var the2nd = theStr.lastIndexOf(&#39;-&#39;);
if (the1st == the2nd) { return(false); }
else {
var y = theStr.substring(0,the1st);
var m = theStr.substring(the1st+1,the2nd);
var d = theStr.substring(the2nd+1,theStr.length);
var maxDays = 31;
if (isInt(m)==false || isInt(d)==false || isInt(y)==false) {
return(false); }
else if (y.length < 4) { return(false); }
else if (!isBetween (m, 1, 12)) { return(false); }
else if (m==4 || m==6 || m==9 || m==11) maxDays = 30;
else if (m==2) {
if (y % 4 > 0) maxDays = 28;
else if (y % 100 == 0 && y % 400 > 0) maxDays = 28;
else maxDays = 29;
}
if (isBetween(d, 1, maxDays) == false) { return(false); }
else { return(true); }
}
}
/*********************************************************************************
* FUNCTION: isEuDate checks a valid date in British format
* PARAMETERS: theStr AS String
* CALLS: isBetween, isInt
* RETURNS: TRUE if theStr is a valid date otherwise false.
**********************************************************************************/
function isEuDate (theStr) {
if (isBetween(theStr.length, 8, 10) == false) { return(false); }
else {
var the1st = theStr.indexOf(&#39;/&#39;);
var the2nd = theStr.lastIndexOf(&#39;/&#39;);
if (the1st == the2nd) { return(false); }
else {
var m = theStr.substring(the1st+1,the2nd);
var d = theStr.substring(0,the1st);
var y = theStr.substring(the2nd+1,theStr.length);
var maxDays = 31;
if (isInt(m)==false || isInt(d)==false || isInt(y)==false) {
return(false); }
else if (y.length < 4) { return(false); }
else if (isBetween (m, 1, 12) == false) { return(false); }
else if (m==4 || m==6 || m==9 || m==11) maxDays = 30;
else if (m==2) {
if (y % 4 > 0) maxDays = 28;
else if (y % 100 == 0 && y % 400 > 0) maxDays = 28;
else maxDays = 29;
}
if (isBetween(d, 1, maxDays) == false) { return(false); }
else { return(true); }
}
}
}
/********************************************************************************
* FUNCTION: Compare Date! Which is the latest!
* PARAMETERS: lessDate,moreDate AS String
* CALLS: isDate,isBetween
* RETURNS: TRUE if lessDate<moreDate
*********************************************************************************/
function isComdate (lessDate , moreDate)
{
if (!isDate(lessDate)) { return(false);}
if (!isDate(moreDate)) { return(false);}
var less1st = lessDate.indexOf(&#39;-&#39;);
var less2nd = lessDate.lastIndexOf(&#39;-&#39;);
var more1st = moreDate.indexOf(&#39;-&#39;);
var more2nd = moreDate.lastIndexOf(&#39;-&#39;);
var lessy = lessDate.substring(0,less1st);
var lessm = lessDate.substring(less1st+1,less2nd);
var lessd = lessDate.substring(less2nd+1,lessDate.length);
var morey = moreDate.substring(0,more1st);
var morem = moreDate.substring(more1st+1,more2nd);
var mored = moreDate.substring(more2nd+1,moreDate.length);
var Date1 = new Date(lessy,lessm,lessd); 
var Date2 = new Date(morey,morem,mored); 
if (Date1>Date2) { return(false);}
return(true);
}
/*********************************************************************************
* FUNCTION isEmpty checks if the parameter is empty or null
* PARAMETER str AS String
**********************************************************************************/
function isEmpty (str) {
if ((str==null)||(str.length==0)) return true;
else return(false);
}
/*********************************************************************************
* FUNCTION: isInt
* PARAMETER: theStr AS String 
* RETURNS: TRUE if the passed parameter is an integer, otherwise FALSE
* CALLS: isDigit
**********************************************************************************/
function isInt (theStr) {
var flag = true;
if (isEmpty(theStr)) { flag=false; }
else
{ for (var i=0; i<theStr.length; i++) {
if (isDigit(theStr.substring(i,i+1)) == false) {
flag = false; break;
}
}
}
return(flag);
}
/*********************************************************************************
* FUNCTION: isReal
* PARAMETER: heStr AS String 
decLen AS Integer (how many digits after period)
* RETURNS: TRUE if theStr is a float, otherwise FALSE
* CALLS: isInt
**********************************************************************************/
function isReal (theStr, decLen) {
var dot1st = theStr.indexOf(&#39;.&#39;);
var dot2nd = theStr.lastIndexOf(&#39;.&#39;);
var OK = true;
if (isEmpty(theStr)) return false;
if (dot1st == -1) {
if (!isInt(theStr)) return(false);
else return(true);
}
else if (dot1st != dot2nd) return (false);
else if (dot1st==0) return (false);
else {
var intPart = theStr.substring(0, dot1st);
var decPart = theStr.substring(dot2nd+1);
if (decPart.length > decLen) return(false);
else if (!isInt(intPart) || !isInt(decPart)) return (false);
else if (isEmpty(decPart)) return (false);
else return(true);
}
}
/*********************************************************************************
* FUNCTION: isEmail
* PARAMETER: String (Email Address)
* RETURNS: TRUE if the String is a valid Email address
* FALSE if the passed string is not a valid Email Address
* EMAIL FORMAT: AnyName@EmailServer e.g; webmaster@hotmail.com
* @ sign can appear only once in the email address.
*********************************************************************************/
function isEmail (theStr) {
var atIndex = theStr.indexOf(&#39;@&#39;);
var dotIndex = theStr.indexOf(&#39;.&#39;, atIndex);
var flag = true;
theSub = theStr.substring(0, dotIndex+1)
if ((atIndex < 1)||(atIndex != theStr.lastIndexOf(&#39;@&#39;))||(dotIndex < atIndex + 2)||(theStr.length <= theSub.length)) 
{ return(false); }
else { return(true); }
}
/*********************************************************************************
* FUNCTION: newWindow
* PARAMETERS: doc -> Document to open in the new window
hite -> Height of the new window
wide -> Width of the new window
bars -> 1-Scroll bars = YES 0-Scroll Bars = NO
resize -> 1-Resizable = YES 0-Resizable = NO
* CALLS: NONE
* RETURNS: New window instance
**********************************************************************************/
function newWindow (doc, hite, wide, bars, resize) {
var winNew="_blank";
var opt="toolbar=0,location=0,directories=0,status=0,menubar=0,";
opt+=("scrollbars="+bars+",");
opt+=("resizable="+resize+",");
opt+=("width="+wide+",");
opt+=("height="+hite);
winHandle=window.open(doc,winNew,opt);
return;
}
/*********************************************************************************
* FUNCTION: DecimalFormat
* PARAMETERS: paramValue -> Field value
* CALLS: NONE
* RETURNS: Formated string
**********************************************************************************/
function DecimalFormat (paramValue) {
var intPart = parseInt(paramValue);
var decPart =parseFloat(paramValue) - intPart;
str = "";
if ((decPart == 0) || (decPart == null)) str += (intPart + ".00");
else str += (intPart + decPart);
return (str);
}
Copier après la connexion

 "^\\d+$"  //非负整数(正整数 + 0) 

"^[0-9]*[1-9][0-9]*$"  //正整数 

"^((-\\d+)|(0+))$"  //非正整数(负整数 + 0) 

"^-[0-9]*[1-9][0-9]*$"  //负整数 

"^-?\d+$"   //Entier

"^\d+(\.\d+)?$"   //Nombre à virgule flottante non négatif (nombre à virgule flottante positif + 0)

"^(([0-9]+\.[0-9]*[1-9][0-9]*)|([0-9]*[ 1-9 ][0-9]*\.[0-9]+)|([0-9]*[1-9][0-9]*))$" //Nombre à virgule flottante positif

"^((-\d+(\.\d+)?)|(0+(\.0+)?))$" //Nombre à virgule flottante non positif (nombre à virgule flottante négatif + 0)

"^(-(([0-9]+\.[0-9]*[1-9][0-9]*)|([0-9 ]*[1-9] [0-9]*\.[0-9]+)|([0-9]*[1-9][0-9]*)))$" //Flottant négatif numéro de point

"^(-?\d+)(\.\d+)?$" // Nombre à virgule flottante

"^[A-Za-z ]+$" // Composé de 26 Une chaîne composée de lettres anglaises

"^[A-Z]+$" // Une chaîne composée de 26 lettres anglaises majuscules

"^[a-z] +$" //Une chaîne composée de 26 lettres anglaises minuscules

"^[A-Za-z0-9]+$" //Une chaîne composée de chiffres et Chaîne de 26 lettres anglaises

"^\w+$" //Une chaîne composée de chiffres, de 26 lettres anglaises ou de traits de soulignement

"^[\w-]+( \.[\w-]+)*@[\w-]+(\.[\w-]+)+$"    //adresse e-mail

"^[a-zA- z]+://(\w+(-\w+)*)(\.(\w+(-\w+)*))*(\?\S*)?$"  //url

Ce qui précède est la syntaxe de base des expressions régulières partagées avec vous. J'espère qu'elle vous sera utile pour votre apprentissage.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal