ホームページ >ウェブフロントエンド >jsチュートリアル >js正規表現の基本構文の概要
この記事では主に js 正規表現の基本的な構文の概要を説明します。これは非常に参考になるので、皆さんのお役に立てれば幸いです。編集者をフォローして見てみましょう。
1. 基本的な正規表現構文
2 つの特殊記号 '^' と '$'。それらの機能は、それぞれ文字列の始まりと終わりを示すことです。
例は次のとおりです。
"^The": "The" で始まるすべての文字列 ("There"、"The cat" など) を意味します。
"of death$": " で終わるすべての文字列を意味します。 of絶望" 文字列;
"^abc$": "abc" で始まり "abc" で終わる文字列を表します - 笑、"abc" 自体のみ;
"notice": "notice" を含む任意の文字列を表します。
最後の例と同様に、2 つの特殊文字を使用しない場合は、検索する文字列が検索文字列のいずれかの部分にあることを示しており、その文字列を先頭に配置しているわけではありません。
"ab{2}": 文字列の後に 2 つの b が続くことを示します ("abb");
"ab{2,}": 文字列の後に少なくとも 2 つの b が続くことを示します。
"ab{3,5}": 文字列に a の後に 3 ~ 5 個の b が続くことを示します。 範囲の下限を指定する必要があることに注意してください (例: "{,2}" の代わりに "{0,2}")。 また、「*」、「+」、「?」が「{0,}」、「{1,}」、「{0,1}」と同等であることに気づいたかもしれません。 「or」演算を意味する '|' もあります。 "hi|hello": 文字列に "hi" または "hello" があることを意味します。 "(b|cd)ef": 「bef」または「cdef」を意味します; 「(a|b)*c」: 「a」と「b」の後に「c」が続く文字列を表します。'"a.[0-9]": 文字列に「a」の後に任意の文字と数字が続くことを示します。 "^.{3}$": 任意の 3 文字の文字列を示します。長さは 3 文字です); 角括弧は、文字列内の特定の位置に特定の文字が出現できることを示します: "[ab]": 文字列に "a" または "b" があることを示します (同等to "a|b"); "[a-d]": 文字列に小文字の「a」から「d」のいずれかが含まれていることを示します (「a|b|c|d」または「[abcd ]」と同等) ; "^[a-zA-Z]": 文字で始まる文字列を表します。 "[0-9]%": パーセント記号の前に 1 桁の数字を表します。
",[a-zA-Z0-9]$": 文字列がコンマで終わり、その後に文字または数字が続くことを示します。
角括弧内で「^」を使用して、不要な文字が角括弧内の最初の文字であることを示すこともできます。
(例: "%[^a-zA-Z]%" は、2 つのパーセント記号の間に文字を含めないことを意味します)。
これをそのまま表現するには、これらの文字「^.$()|*+?{」の前にシフト文字 '' を追加する必要があります。
角括弧内ではエスケープ文字は必要ないことに注意してください。
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} は、(前の式の直後にあるため) 2 桁目から開始することを意味し、長さは 4 ~ 9 桁の文字列です。大文字と小文字、数字、または特殊文字セット [._] で構成する必要があります。
********************************************** ***** **********************************
//ユーザー名を確認: 1 ~ 30 のみ文字も入力可能
/^[a-zA-Z]{1,30}$/ で始まる文字列
******************** *********************************************** **** *****
//確認パスワード: 6 ~ 20 文字、数字、アンダースコアのみを入力できます
/^(w){6,20}$/
w:文字、数字、または下線文字の一致に使用されます
************************************** **** **************************************
//通常の電話とFAX 番号: 「+」または数字で始まり、「-」と「 "を含めることができます
/^[+]{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})(]?)$" //エミル
"(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 個の数字と 26 個の英字で構成される文字列
" ^ \w+$" //数字、26 文字の英字、またはアンダースコアで構成される文字列
"^[\w-]+(\.[\w-]+)*@[\w-]+( \.[ \w-]+)+$" //メールアドレス
"^[a-zA-z]+://(\w+(-\w+)*)(\.(\w+(-- \w+ )*))*(\?\S*)?$" //url
上記は、正規表現の基本的な構文を共有するものです。皆さんの学習に役立つことを願っています。
以上がjs正規表現の基本構文の概要の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。