【问题标题】:about complicated RegExp [closed]关于复杂的 RegExp [关闭]
【发布时间】:2011-08-24 01:27:31
【问题描述】:

我需要一个正则表达式来检查字符串“不能 \w,-,. 并且不能以 . 开头。”
我希望结果是

  • abc->假
  • ab_c ->假
  • a-b_c.->假
  • a@-b_C。 ->真的
  • .a-b_c。 ->真
  • 我只尝试了/[^\w-\.]/ “.a-b_c”。失败了,我得到了错误(我希望是真的) 我试过/^\./ 可以是“.a-b_c”。正确,但其他失败。

    有没有人可以帮助我?

    【问题讨论】:

    • “不是以.开头”?但最后一个以 .
    • 我从您的解释中收集到的内容与您的测试用例不匹配。您需要一个只有单词字符(字母、数字和下划线)、破折号 (-) 或点 (.) 的正则表达式,但它不是以点开头的吗?对吗?

    标签: javascript regex


    【解决方案1】:

    如果您需要匹配仅包含\w-. 且不以. 开头的字符串,请尝试以下操作:

    /^(?!\.)[\w.-]+$/
    

    详情:

    • ^ - 从字符串开头搜索
    • (?!\.) - 如果此位置有 . 符号,则不匹配
    • [\w.-]+ - 匹配来自\w.- 集合的多个符号
    • $ - 匹配到字符串结尾

    测试:

    • abc -> 匹配
    • ab_c -> 匹配
    • a-b_c. -> 匹配
    • a@-b_C. -> 不匹配
    • .a-b_c. -> 不匹配

    【讨论】:

    • 这些“测试”结果似乎与 OP 的“希望结果是”相反。
    • 我不明白 OP 描述中的“真”或“假”是什么意思。所以我改用了“匹配”这个词。如果需要,您可以通过任何方式反转匹配结果 (if (! matched))。
    • 成功了!谢谢。我试过这个 /(^\.{1}?|[^\w-.])/ ,它也有效!但我认为你的更好。对不起我的英语。
    猜你喜欢
    • 2013-04-04
    • 2010-10-26
    • 1970-01-01
    • 2015-03-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-09
    • 2017-08-02
    相关资源
    最近更新 更多