【问题标题】:regular expression: allow alphabets and a comma in between only正则表达式:只允许字母和逗号之间
【发布时间】:2010-11-10 02:36:05
【问题描述】:

我想让用户输入他们自己的城镇/城市和国家,所以我想只在城市和国家之间允许字母和逗号,下面是我想出的,但它不适用于第二个表达

'/[a-zA-Z\s]\,[a-zA-Z\s]/'

第一个不完美,因为它允许输入任意数量的逗号,

'/^[a-zA-Z\s\,]+$/'

if(!preg_match('/^[a-zA-Z\s\,]+$/', $mem_town_city_country) || !preg_match('/[a-zA-Z\s]\,[a-zA-Z\s]/', $mem_town_city_country))
{
   $error = true;
   echo '<error elementid="mem_town_city_country" message="TOWN/CITY, COUNTRY - sorry, they appear to be incorrect."/>';
}

我怎样才能只允许一个逗号?

另外,不确定这是否太多 - 我可以检查城市的字符输入,例如至少 3 个,国家至少 4 个?

谢谢。

【问题讨论】:

    标签: php regex preg-match


    【解决方案1】:

    你很亲密。试试这个:

    /^[a-zA-Z\s]+\,[a-zA-Z\s]+$/
    

    对于字数要求:

    /^[a-zA-Z\s]{3,}\,[a-zA-Z\s]{4,}$/
    

    【讨论】:

    • 通过添加 {3,} 而不是 plus 表示您需要至少 3 个字符(您对城市和国家/地区的要求)
    • 你也可以使用 \w 而不是 a-zA-Z
    • @迈克尔。 \w 将包括下划线和数字。
    • 为什么 '\,' 不需要转义逗号
    • 诸如“科罗拉多州卡农市”之类的内容呢?几乎每次你看到有人列举大写和/或小写的 26 个字母时,这是一个危险信号,表明他们做错了。要匹配任何字母,您必须使用\p{L}。欢迎来到新千年。
    【解决方案2】:

    只允许字母,至少需要1个字母,也允许逗号:

    var regex = new RegExp('^[a-zA-Z]{1,}');
    
    if (regex.test(query)) {    
        // do whatever you want
    }
    

    【讨论】:

    • 这是如何回答问题的?请详细说明一下。
    【解决方案3】:

    如此接近!事实上,您所要求的额外内容正是这个人需要的修复:

    '/[a-zA-Z\s]{3,}\,[a-zA-Z\s]{4,}/'
    

    您已经正确定义了字符类,但没有指出应该多久设置一次repeated

    【讨论】:

    • 再说一遍,[a-zA-Z] 是写(?=\p{ASCII})\pL 的不好方式。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-29
    相关资源
    最近更新 更多