比如:13933991133,只由139這3個數字組成
16866881166,只由168這3個數字組成
這個正則怎么寫啊,試了很久沒有成功
uj5u.com熱心網友回復:
如果是確定的3個數字,就比較好寫,不確定的3個數字,這要怎么弄啊
uj5u.com熱心網友回復:
"^1[345678]\\d{1}$"uj5u.com熱心網友回復:
這個好像不行
uj5u.com熱心網友回復:
如果確定的數字,比如138,就可以用“[138]{11}”這個正則,匹配出來13833888833,但是這3個數字是0-9的任意3個數字組合的話,怎么弄,就沒啥思路了
uj5u.com熱心網友回復:
匹配的前3位,如果全匹配"^1[345678]\\d{9}$"第1位是1,第2位:345678,其余位都是從0-9的數字
uj5u.com熱心網友回復:
正則是用來加快開發的,如果不用正則更快,就不用正則{
var b1 = DigitsOnly("13933991133", 3); // true
var b2 = DigitsOnly("16866881166", 3); // true
var b3 = DigitsOnly("12345678901", 3); // false
}
static bool DigitsOnly(string s, int digits)
{
return s.All(x => char.IsDigit(x)) && s.GroupBy(x => x).Count() == digits;
}
uj5u.com熱心網友回復:
額1.正則不是干這個事情的
2.如果一定要正則去干,那不妨反過來想,查是否存在任何一個非1,3,9的數字
uj5u.com熱心網友回復:
(?(?=\d)[139]|\w)uj5u.com熱心網友回復:
從頭到尾比較^(?(?=\d)[168]|\w)+$
uj5u.com熱心網友回復:
6樓可以你其實只要去計數,超過三個不同數字就是false
string str = "13933991133";
bool isPhoneNumber =Regex.IsMatch(str,@"^\d{11}$")&&str.Distinct().Count() == 3;
uj5u.com熱心網友回復:
笨辦法,第一位肯定是1,然后就是從9個數字中選2個 C 9 2 = 36種組合uj5u.com熱心網友回復:
樓上的幾位兄弟辛苦了,不過都沒有達到我想要的效果。。自己琢磨了一中午,想到了一個正則:1(\d)(\d)(1|\1|\2){8},基本達到需求
uj5u.com熱心網友回復:
13333991133 不通過uj5u.com熱心網友回復:
1([1,2,3]{10}|[1,2,4]{10}|[1,2,5]{10}|[1,2,6]{10}|[1,2,7]{10}|[1,2,8]{10}|[1,2,9]{10}|[1,3,4]{10}|[1,3,5]{10}|[1,3,6]{10}|[1,3,7]{10}|[1,3,8]{10}|[1,3,9]{10}|[1,4,5]{10}|[1,4,6]{10}|[1,4,7]{10}|[1,4,8]{10}|[1,4,9]{10}|[1,5,6]{10}|[1,5,7]{10}|[1,5,8]{10}|[1,5,9]{10}|[1,6,7]{10}|[1,6,8]{10}|[1,6,9]{10}|[1,7,8]{10}|[1,7,9]{10}|[1,8,9]{10})拿走不謝
uj5u.com熱心網友回復:
你那分組捕獲的如果前三個數字有兩個及三個相同,后面才開始不同,你就驗證不成功了,比如13樓說的,比如13333991133 ,13111112311,11111112311你這就是錯誤的。你必須1開始的話,我那個這里改下
Regex.IsMatch(str,@"^1\d{10}$")
14樓直接給你全組合了
uj5u.com熱心網友回復:
不知道怎么用正則,但是你可以通過set判斷一個字串里面有幾個非重復的字符。uj5u.com熱心網友回復:
牛人,這個絕對正解
uj5u.com熱心網友回復:
是的,前3個數字不能有重復的
uj5u.com熱心網友回復:
請問這些東西是什么意思啊?
uj5u.com熱心網友回復:
^定位符,從第1位開始比較,手機號的第一位為1,第二位為:345678這些數字,第三位可以為0-9的所有數字,后面的8位同第3位,$到第11位結束,結束符,也就是這個字串只能是11位
uj5u.com熱心網友回復:
那么就是說 限制手機段咯匹配前三位數字即可 準確定是第二位和第三位
uj5u.com熱心網友回復:
你其實就想判斷前面三個數,你可以用字典uj5u.com熱心網友回復:
1([1,2,3]{10}|[1,2,4]{10}|[1,2,5]{10}|[1,2,6]{10}|[1,2,7]{10}|[1,2,8]{10}|[1,2,9]{10}|[1,3,4]{10}|[1,3,5]{10}|[1,3,6]{10}|[1,3,7]{10}|[1,3,8]{10}|[1,3,9]{10}|[1,4,5]{10}|[1,4,6]{10}|[1,4,7]{10}|[1,4,8]{10}|[1,4,9]{10}|[1,5,6]{10}|[1,5,7]{10}|[1,5,8]{10}|[1,5,9]{10}|[1,6,7]{10}|[1,6,8]{10}|[1,6,9]{10}|[1,7,8]{10}|[1,7,9]{10}|[1,8,9]{10})
拿走不謝
大佬,再加個0就更完美了
uj5u.com熱心網友回復:
...
大佬,再加個0就更完美了
你要求太高了;-)
擴展個功能,"手機號只由4位數字組成",豈不要忙死?
uj5u.com熱心網友回復:
正則不做這種業務弄個非常非常簡單的演算法
substring(0,3)--->list
后面8個,任一個都在list里面,就是true
uj5u.com熱心網友回復:
感謝分享!!!!uj5u.com熱心網友回復:
暈倒爆炸
uj5u.com熱心網友回復:
學習了
uj5u.com熱心網友回復:
你可以分段匹配uj5u.com熱心網友回復:
string phone = "168168116682";
var count = phone.ToList().Distinct().Count();
return count <= 3
字串轉成char串列,去重,然后獲取去重后的長度
uj5u.com熱心網友回復:
比如:13933991133,只由139這3個數字組成
16866881166,只由168這3個數字組成
這個正則怎么寫啊,試了很久沒有成功
有順序要求嗎?還是說前三位
uj5u.com熱心網友回復:
比如:13933991133,只由139這3個數字組成
16866881166,只由168這3個數字組成
這個正則怎么寫啊,試了很久沒有成功
如果是確定的3個數字,就比較好寫,不確定的3個數字,這要怎么弄啊
如果想用正則,你得先把需求弄明白
比如
1、匹配大陸手機號碼
2、號碼中只能是前三個數字組成的
3、前三個數字符合大陸手機號碼號段
那么可以得到以下正則
^(?=1(33|49|53|73|77|80|81|89|91|99|93|30|31|...)\d{8}$)1(\d)(\d)(?=(1|\1|\2)+$)
第一個?=用來確定號段及數字串長度符合手機格式,第二個?=用來確定數字全部存在于前三位
uj5u.com熱心網友回復:
^(?=1(?:33|49|53|73|77|80|81|89|91|99|93|30|31|...)\d{8}$)1(\d)(\d)(?=(1|\1|\2)+$)^(?=1(33|49|53|73|77|80|81|89|91|99|93|30|31|...)\d{8}$)1(\d)(\d)(?=(1|\2|\3)+$)
稍微調整下,忘了把號段取消分組了
uj5u.com熱心網友回復:
new RegExp('^1[1' + ((phone||'').match("^1([0-9]{2})[0-9]{8}$")||['','x'])[1] + ']{10}$').test('13933991133')uj5u.com熱心網友回復:
new RegExp('^1[1' + ((phone||'').match("^1([0-9]{2})[0-9]{8}$")||['','x'])[1] + ']{10}$').test(phone)uj5u.com熱心網友回復:
這需求扯淡了啊可以用正則驗證手機號的合法性
用查找演算法或直接使用Linq的Distinct得到字符個數來做終極驗證有效性
兩者結合,就可以滿足你的需求
不顧正則的感受是后果嚴重地
uj5u.com熱心網友回復:
其實樓主這個還算簡單的,需求比較明了,就是分組參考而已^(?=1\d{10}$)1(\d)(\d)(?=(1|\1|\2)+$)
/^(?=1\d{10}$)1(\d)(\d)(?=(1|\1|\2)+$)/gi.test('13933991133') // true
/^(?=1\d{10}$)1(\d)(\d)(?=(1|\1|\2)+$)/gi.test('16866881166') // true
/^(?=1\d{10}$)1(\d)(\d)(?=(1|\1|\2)+$)/gi.test('16866881167') // false
uj5u.com熱心網友回復:
/^(?=1\d{10}$)(\d)(?:\d*?)((?!\1)\d)(?:\d|\2)*((?!\1|\2)\d)(\1|\2|\3)$/gi.test('11686688166') // true 不限定前三位,整個字串不超過3個數字組成uj5u.com熱心網友回復:
40樓正則有點錯誤/^(?=1\d{10}$)(\d)(?:\1*?)((?!\1)\d)(?:\1|\2)*((?!\1|\2)\d)(\1|\2|\3)*$/gi.test('11686688166') // true
/^(?=1\d{10}$)(\d)(?:\1*?)((?!\1)\d)(?:\1|\2)*((?!\1|\2)\d)(\1|\2|\3)*$/gi.test('11111111123') // true
/^(?=1\d{10}$)(\d)(?:\1*?)((?!\1)\d)(?:\1|\2)*((?!\1|\2)\d)(\1|\2|\3)*$/gi.test('11111111423') // false
uj5u.com熱心網友回復:
寫一個字串判斷函式不就結了。糾結正則運算式的時間都夠把函式寫十幾遍了。uj5u.com熱心網友回復:
都是大神 3位數uj5u.com熱心網友回復:
有想過先拆開成list:list(str),然后用set(list)去重,最后len(set)>3的話,就匹配失敗uj5u.com熱心網友回復:
[139]{11}
小白湊熱鬧
uj5u.com熱心網友回復:
不知道是不是你想要的那樣的,下面這個正則可以匹配139和168開頭的手機號,你可以試試,不對可以再問我^(139|168)\d{8}$
uj5u.com熱心網友回復:
試試這樣顯示139**********uj5u.com熱心網友回復:
這個根本不用正則核能做吧uj5u.com熱心網友回復:
字串從0開始取3位即可轉載請註明出處,本文鏈接:https://www.uj5u.com/net/81412.html
標籤:C#
