首先空格就用空格“ ”表示,而不是\s,\s表示的不止空格,我认为应该是:/^[A-Z]([a-z]{2,}[- ]?[a-z])+$/

解决方案 »

  1.   

      测试代码:
      var ptn = /^[A-Z]([a-z]{2,}[- ]?[a-z])+$/;
      var str='Aab a';
      alert(str+" : "+ ptn.test(str));
      str='Aab -a';
      alert(str+" : "+ ptn.test(str));
      str='Aab aaab a';
      alert(str+" : "+ ptn.test(str));
      

  2.   

    楼上的都不对哦呵呵…
     /^[A-Z]([a-z]{2,}[- ]?[a-z])+$/这个表达式是这样的:一个大写字母开头,接着两个以上的小写字母,加上一个和零个的连接符(或者一个空号)然后再接上一个小写字母,要是这样的话与 1.只能由英文,空格或连字符组成 矛盾了,因为按照上面的表达式“Aab-c c”是通不过的…,还有“Aab-cc”这个也是通不过的
      

  3.   

    忘了说,连字符和空格不能同时存在。而且要修正一下,空格最多有两个,而不是先前的一个。如果有空格或连字符,则空格前后至少应有3个字母, 连字符前后至少两个字母。我把它分解一下:Aa(  )a有以下几种情况:
    1. (  )里只有一个字母,共4个字符 
    2. (  )里面可能是一连串字母,没有空格或连字符
    以上两种情况即[a-z]+3. (  )里面如果带空格/连字符,前后至少两个字母, 
    [a-z]?[-][a-z]+如何将以上连起来?如果有两个以上连字符怎么办?
    名称例子:
    Ashby-de-la-Zouch, Ashton-in-Makerfield, Ashton-under-Lyne, Brighton and Hove, Buckhurst Hill, Bury St Edmunds
    Chapel-en-le-Frith,Clayton-le-Moors希望能从本例学习正则更深入些
      

  4.   


    /^(?:[a-z]{4,}|((?:[a-z]{2,}-)+|(?:[a-z]{3,}[ ]){1,2}[a-z])[a-z]{2,})$/gi
      

  5.   


    当长度大于四的时候里面可以包含空格连接符也可以没有,且空格最多有两个,连接符的数量没有限制。空格前后至少各有2个字母,连接符前后至少各有两个字母 (看例子:Bury St Edmunds)/^(?:[a-z]{4,}|((?:[a-z]{2,}-)+|(?:[a-z]{3,}[ ]){1,2}[a-z])[a-z]{2,})$/gi ----->我改成
    /^(?:[a-zA-Z]{4,}|((?:[a-zA-Z]{2,}-)+|(?:[a-zA-Z]{2,}[ ]){1,2}[a-zA-Z])[a-zA-Z]{2,})$/ 因为首字母会自动改成大写的, 空格也改成2个字母以上了,应该可以了吧
      

  6.   


    JS的正则var pattern = /^(?:[a-z]{4,}|((?:[a-z]{2,}-)+|(?:[a-z]{2,}[ ]){1,2})[a-z]{2,})$/gi;// 这样就可以
    // 这里结尾的i就是不区分大小写的意思,在正则里 /[a-z]/gi,这里的g表示全局搜索,i表示不区分大小写 和 /[a-zA-Z]/g 效果一样
      

  7.   

    哦,这样啊, 谢谢wackyboy, 说的真详细.不过,请问 ?: 这个是什么意思啊? 我查了半天也没找到------->问号不是放在字符串后面表示出现次数么?
      

  8.   


    问号的用法很多
    在正则中表示前面的模式匹配零或一次
    如果问号位于左括号的右侧 则有以下几种用途
    1、组
    (?:exp) : 非捕获组
    (?<name>exp) : 命名组 name 为该组的组名
    (?'name'exp) : 同上
    (?<name1-name2>exp) : 平衡组
    2、决策
    (?(exp)yes|no) : if exp is true then yes else no 这里的 no 部分可选
    (?(GroupName)yes|no) : 同上,用组作决策
    3、声明
    (?=exp) : 正声明
    (?!exp) : 负声明
    (?<=exp) : 反向正声明
    (?<!exp) : 反向负声明
    // 注:有的名词不同资料叫法不一样。