如何匹配一个 不以xf 开始的 字母和数字 混合的 字符串?


如何匹配一个 不以xf 开始的 字母和数字 混合的 字符串
^((?!xf).)*$ 匹配不以xf开始的

(^([a-z])+([a-z0-9])+$)|() 匹配 不能全为数字的

合起来,匹配就出现问题呢?

正则表达式 javascript正则 JavaScript

虐灯狂人爱迪生 10 years, 4 months ago

不以XX开头 ,你需要的是 零宽度负回顾后发断言


 (?<!xf)

字母和数字混合 ,这个就比较常规了


 [a-zA-Z0-9]+

合在一起应该就是你想要的


 (?<!xf)[a-zA-Z0-9]+


但是分割线

JavaScript不支持这种高级货(我也是才知道),所以只能这样


 !/^xf/.test(str) && /[a-zA-Z0-9]+/.test(str)

死魚量產型 answered 10 years, 4 months ago

不知道这个正则怎么样: // Update: 添加 x? 以匹配chuan "x"
(^[a-wy-z][a-z0-9]+$)|(^x[a-eg-z0-9][a-z0-9]+$)|(^x?$)

一些测试:


 /(^[a-wy-z][a-z0-9]+$)|(^x[a-eg-z0-9][a-z0-9]+$)|(^x?$)/.test("")      // true
/(^[a-wy-z][a-z0-9]+$)|(^x[a-eg-z0-9][a-z0-9]+$)|(^x?$)/.test("hello") // true
/(^[a-wy-z][a-z0-9]+$)|(^x[a-eg-z0-9][a-z0-9]+$)|(^x?$)/.test("x") // true
/(^[a-wy-z][a-z0-9]+$)|(^x[a-eg-z0-9][a-z0-9]+$)|(^x?$)/.test(" ")     // false
/(^[a-wy-z][a-z0-9]+$)|(^x[a-eg-z0-9][a-z0-9]+$)|(^x?$)/.test("233")   // false
/(^[a-wy-z][a-z0-9]+$)|(^x[a-eg-z0-9][a-z0-9]+$)|(^x?$)/.test("xf1s2") // false
/(^[a-wy-z][a-z0-9]+$)|(^x[a-eg-z0-9][a-z0-9]+$)|(^x?$)/.test("xg122") // true
/(^[a-wy-z][a-z0-9]+$)|(^x[a-eg-z0-9][a-z0-9]+$)|(^x?$)/.test("cf122") // true

解释如下:
(^[a-wy-z][a-z0-9]+$) 表示首字符为小写字母,且不是 x
(^x[a-eg-z0-9][a-z0-9]+$) 表示首字母为 x 且次位不是 f
(^$) 匹配空串。 (^x?$) 匹配空串或者串 "x"
如果需要忽略大小写,可以使用 /(^[a-wy-z][a-z0-9]+$)|(^x[a-eg-z0-9][a-z0-9]+$)|(^$)/i

其实你也可以


 function isWanted (str) {
    return /^((?!xf).)*$/.test(str) && /(^([a-z])+([a-z0-9])+$)|(^$)/.test(str);
}

有用请支持哦

桃子味气球 answered 10 years, 4 months ago

Your Answer