이 글은 주로 js 정규식의 기본 구문 요약을 공유하며 좋은 참고 가치가 있으며 모든 사람에게 도움이 되기를 바랍니다. 편집자를 따라가서 살펴보겠습니다.
1. 기본 정규식 구문
두 개의 특수 기호 '^' 및 '$'. 그들의 기능은 각각 문자열의 시작과 끝을 나타내는 것입니다.
예는 다음과 같습니다:
"^The": "The"로 시작하는 모든 문자열을 의미합니다("There", "The cat" 등).
"of 절망$": "로 끝나는 모든 문자열을 의미합니다. of 절망" 문자열;
"^abc$": "abc"로 시작하고 끝나는 문자열을 나타냅니다. 하하, "abc" 자체만 나타냅니다.
"notice": "notice"를 포함하는 문자열을 나타냅니다.
마지막 예와 같이 두 개의 특수 문자를 사용하지 않으면 찾으려는 문자열이 검색된 문자열의 어떤 부분에도 있음을 나타내는 것입니다. 즉, 맨 위에 위치하는 것이 아닙니다.
"ab{2}": 문자열에 a 뒤에 2개의 b가 있음을 나타냅니다("abb").
"ab{2,}": 문자열에 a 뒤에 최소한 2개의 b가 있음을 나타냅니다.
"ab{3,5}": 문자열에 a 다음에 3~5b가 있음을 나타냅니다. 범위의 하한을 지정해야 한다는 점에 유의하세요(예: "{,2}" 대신 "{0,2}"). 또한 '*', '+' 및 '?'는 "{0,}", "{1,}" 및 "{0,1}"과 동일하다는 점을 눈치채셨을 것입니다. "또는" 연산을 의미하는 '¦'도 있습니다. "hi¦hello": 문자열에 "hi" 또는 "hello"가 있음을 의미합니다. "(b¦cd)ef": "bef" 또는 "cdef"를 의미합니다. "(a¦b)*c": "a"와 "b" 뒤에 "c"가 오는 혼합 문자열을 나타냅니다.'"a.[0-9]": 문자열에 "a" 뒤에 임의의 문자와 숫자가 있음을 나타냅니다. "^.{3}$": 세 문자로 구성된 문자열을 나타냅니다. 길이는 3자입니다.) 대괄호는 특정 문자가 문자열의 특정 위치에 나타날 수 있음을 나타냅니다. "[ab]": 문자열에 "a" 또는 "b"가 있음을 나타냅니다. to "a¦b"); "[a-d]": 문자열에 소문자 'a' ~ 'd' 중 하나가 포함되어 있음을 나타냅니다("a¦b¦c¦d" 또는 "[abcd ]"와 동일). ; "^[a-zA-Z]": 문자로 시작하는 문자열을 나타냅니다. "[0-9]%": 백분율 기호 앞에 있는 숫자를 나타냅니다.
",[a-zA-Z0-9]$": 문자열이 쉼표로 끝나고 그 뒤에 문자나 숫자가 오는 것을 나타냅니다.
대괄호 안에 '^'를 사용하여 원하지 않는 문자를 나타낼 수도 있습니다. '^'는 대괄호 안의 첫 번째 문자여야 합니다.
(예: "%[^a-zA-Z]%"는 두 개의 퍼센트 기호 사이에 문자가 나타나지 않아야 함을 의미합니다).
그대로 표현하려면 "^.$()¦*+?{" 문자 앞에 시프트 문자 ''를 추가해야 합니다.
대괄호 안에는 이스케이프 문자가 필요하지 않습니다.
2. 텍스트 상자의 입력 문자 유형을 제어합니다
1. 숫자와 영어만 입력할 수 있습니다:
<input onkeyup="value=value.replace(/[\W]/g,'') " onbeforepaste="clipboardData.setData('text',clipboardData.getData('text').replace(/[^\d]/g,''))" ID="Text1" NAME="Text1">
2. 숫자만 입력할 수 있습니다:
<input onkeyup="value=value.replace(/[^\d]/g,'') " onbeforepaste="clipboardData.setData('text',clipboardData.getData('text').replace(/[^\d]/g,''))" ID="Text2" NAME="Text2">
3. 전각 문자만 입력 가능:
<input onkeyup="value=value.replace(/[^\uFF00-\uFFFF]/g,'')" onbeforepaste="clipboardData.setData('text',clipboardData.getData('text').replace(/[^\uFF00-\uFFFF]/g,''))" ID="Text3" NAME="Text3">
4. 한자만 입력 가능:
<input onkeyup="value=value.replace(/[^\u4E00-\u9FA5]/g,'')" onbeforepaste="clipboardData.setData('text',clipboardData.getData('text').replace(/[^\u4E00-\u9FA5]/g,''))" ID="Text4" NAME="Text4">
3 정규식 적용 예시에 대한 인기 설명
* ***** ********************************************* ****** *************************
//모두 숫자로 구성되어 있는지 확인
/^[0- 9]{1,20}$/
^은 ^
$ 바로 다음의 시작 문자가 규칙과 일치해야 함을 의미합니다. 즉, $
[] 직전의 시작 문자가 규칙과 일치해야 한다는 의미는 선택적 문자 집합입니다
[0-9] 필수 문자 범위가 0-9임을 나타냅니다
{1,20}은 숫자 문자열의 합법적인 길이가 1~20, 즉 [0-9]의 문자 발생 횟수 범위가 1~20번임을 의미합니다.
/^ 및 $/는 문자열의 하위 문자열만 일치시키는 것이 아니라 전체 문자열이 정의된 규칙과 완전히 일치해야 함을 나타내기 위해 쌍으로 사용해야 합니다.
************************************************* ***** *********************************
//로그인 이름 확인: 5-20만 문자를 입력할 수 있습니다. 숫자, "_", "."를 포함할 수 있는 문자열로 시작합니다.
/^[a-zA-Z]{1}([a-zA-Z0-9]|[._] ){4,19 }$/
^[a-zA-Z]{1}는 첫 번째 문자가 문자여야 함을 의미합니다.
([a-zA-Z0-9]|[._]){4,19}는 길이가 4~9자리 문자열인 두 번째 숫자(이전 표현식 바로 뒤에 오기 때문에)부터 시작한다는 의미입니다. 대문자, 소문자, 숫자 또는 특수문자 집합[._]으로 구성되어야 합니다.
************************************************* ***** ************************************
//사용자 이름 확인: 만 1~30자까지 입력 가능
/^[a-zA-Z]{1,30}$/
********************로 시작하는 문자열 ****** ******************************************** ******* *****
//인증비밀번호 : 영문, 숫자, 밑줄 6~20자만 입력 가능
/^(w){6,20}$/
w: 문자, 숫자 또는 밑줄 문자를 일치시키는 데 사용됩니다.
**************************************** ******* *************************************
//확인 일반 전화 및 팩스 번호: "+" 또는 숫자로 시작할 수 있고 "-" 및 "
/^[+]{0,1}(d){1,3}[ ]?( [-]?((d)| [ ]){1,12})+$/
d: 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>
规则表达式 :
<input type="input" name="regxStr" value="" > (填写/ /之间的表达式) <br>
校验字符串 :
<input type="input" name="str" value="" > <input type="button" name="match" value="匹配" onClick="alert(regx(regxStr.value,str.value));"> </form> </body> </html>
4.正則表達式應用
"^\d+$" //非负整数(正整数 + 0)
"^[0-9]*[1-9][0-9]*$" //正整数
"^((-\d+)|(0+))$" //非正整数(负整数 + 0)
"^-[0-9]*[1-9][0-9]*$" //음의 정수
"^-?d+$" //정수
"^d+(.d+) ?$" //음수가 아닌 부동 소수점 수(양의 부동 소수점 수 + 0)
"^(([0-9]+.[0-9]*[1-9][0-9]* )|( [0-9]*[1-9][0-9]*.[0-9]+)|([0-9]*[1-9][0-9]*))$ " // 양의 부동 소수점 수
"^((-d+(.d+)?)|(0+(.0+)?))$" //양수가 아닌 부동 소수점 수(음의 부동 소수점 수 + 0)
"^ (-(([0-9]+.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][ 0-9]*.[ 0-9]+)|([0-9]*[1-9][0-9]*)))$" // 음의 부동 소수점 수
"^(- ?d+)(.d+)? $" // 부동 소수점 숫자
"^[A-Za-z]+$" // 26개의 영문자로 구성된 문자열
"^[A-Z]+$" // 영문 26자로 구성된 문자열 대문자로 구성된 문자열
"^[a-z]+$" //영문 26자로 구성된 문자열
"^[A-Za-z0-9]+$ " //구성됨 숫자와 영문 26자리로 구성된 문자열
"^w+$" // 숫자와 영문 26자리 또는 밑줄로 구성된 문자열
"^[w-]+(.[w- ]+ )*@[w-]+(.[w-]+)+$" //이메일 주소
"^[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]))$/ // 연월- 일
/^((0([1-9]{1}))|(1[1|2]))/(([0-2]([1-9]{1}))| (3 [0|1]))/(d{2}|d{4})$/ // 월/일/년
"^([w-.]+)@(([[0- 9] {1,3}.[0-9]{1,3}.[0-9]{1,3}.)|(([w-]+.)+))([a-zA- Z] {2,4}|[0-9]{1,3})(]?)$" //Emil
"(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 }
//校验登录名:只能输入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 }
//校验用户姓名:只能输入1-30个以字母开头的字串
function isTrueName(s) { var patrn=/^[a-zA-Z]{1,30}$/; if (!patrn.exec(s)) return false return true }
//校验密码:只能输入6-20个字母、数字、下划线
function isPasswd(s) { var patrn=/^(\w){6,20}$/; if (!patrn.exec(s)) return false return true }
//校验普通电话、传真号码:可以“+”开头,除数字外,可含有“-”
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 }
//校验手机号码:必须以数字开头,除数字外,可含有“-”
function isMobil(s) { var patrn=/^[+]{0,1}(\d){1,3}[ ]?([-]?((\d)|[ ]){1,12})+$/; if (!patrn.exec(s)) return false return true }
//校验邮政编码
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 }
//校验搜索关键字
function isSearch(s) { var patrn=/^[^`~!@#$%^&*()+=|\\\][\]\{\}:;\'\,.<>/?]{1}[^`~!@$%^&()+=|\\\][\]\{\}:;\'\,.<>?]{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('-'); var the2nd = theStr.lastIndexOf('-'); 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('/'); var the2nd = theStr.lastIndexOf('/'); 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('-'); var less2nd = lessDate.lastIndexOf('-'); var more1st = moreDate.indexOf('-'); var more2nd = moreDate.lastIndexOf('-'); 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('.'); var dot2nd = theStr.lastIndexOf('.'); 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('@'); var dotIndex = theStr.indexOf('.', atIndex); var flag = true; theSub = theStr.substring(0, dotIndex+1) if ((atIndex < 1)||(atIndex != theStr.lastIndexOf('@'))||(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); }
"^\\d+$" //非负整数(正整数 + 0)
"^[0-9]*[1-9][0-9]*$" //正整数
"^((-\\d+)|(0+))$" //非正整数(负整数 + 0)
"^-[0-9]*[1-9][0-9]*$" //负整数
"^-?\d+$" //정수
"^\d+(\.\d+)?$" //음수가 아닌 부동 소수점 수(양의 부동 소수점 수 + 0)
"^( ([0 -9]+\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\.[0 -9] +)|([0-9]*[1-9][0-9]*))$" //양수 부동 소수점 수
"^((-\d+(\.\d+) ?)|( 0+(\.0+)?))$" //양수가 아닌 부동 소수점 수(음의 부동 소수점 수 + 0)
"^(-(([0-9]+\. [0-9]*[ 1-9][0-9]*)|([0-9]*[1-9][0-9]*\.[0-9]+)|([0 -9]*[1- 9][0-9]*)))$" //음수 부동 소수점
"^(-?\d+)(\.\d+)?$" //부동 소수점 number
"^[A-Za-z]+$" //영문 26자로 구성된 문자열
"^[A-Z]+$" //영문 대문자 26자로 구성된 문자열
" ^[a-z] +$" // 영문 소문자 26자로 구성된 문자열
"^[A-Za-z0-9]+$" // 숫자와 영문 26자로 구성된 문자열
" ^ \w+$" //숫자, 영문 26자 또는 밑줄로 구성된 문자열
"^[\w-]+(\.[\w-]+)*@[\w-]+( \.[ \w-]+)+$" //이메일 주소
"^[a-zA-z]+://(\w+(-\w+)*)(\.(\w+(-- \w+ )*))*(\?\S*)?$" //url
위는 여러분과 공유하는 정규식의 기본 구문입니다. 모든 분들이 학습하는 데 도움이 되기를 바랍니다.
위 내용은 js 정규식의 기본 구문 요약의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!