【问题标题】:No periods at beginning or end of expression?表达的开头或结尾没有句点?
【发布时间】:2012-12-18 01:04:38
【问题描述】:

我想允许使用字母数字字符和句点;但是,该短语不能连续包含两个或多个句点,不能以句点开头或结尾,并且不允许有空格。

我同时使用 PHP 和 Javascript。

到目前为止,我有/^(?!.*\.{2})[a-zA-Z0-9.]+$/

这适用于允许字母数字字符和句点,同时拒绝空格和连续句点,但我仍然不确定如何检查开始和/或结束句点。我该怎么做?而且,有没有更好的方法来做我已经拥有的?

【问题讨论】:

    标签: php javascript regex


    【解决方案1】:

    开始是:

    /^[^. ](?!.*\.{2})[a-zA-Z0-9.]+[^. ]$/
    

    但应该仔细测试。

    【讨论】:

    • 这将允许任何字符,.. 方括号内有一个点。你必须避开点!
    • @bukfixart: .里面的[]只是一个点,没有特殊含义。
    • @bukfixart -- 不,不在方括号内。在那里,您只需要避开向上插入符号和连字符。有时雪茄就是雪茄。
    【解决方案2】:

    这是一种可能的方法

    /^(?!\.)((?:[a-z\d]|(?<!\.)\.)+)(?<!\.)$/i
    

    更多解释和测试请看这里:http://www.regex101.com/r/rZ6yH4

    编辑:根据泰勒的解决方案,这是他的方式,缩短并简化为字母和数字

    /^(?:[a-z\d]+(?:\.(?!$))?)+$/i
    

    (http://www.regex101.com/r/dL5aG0)

    【讨论】:

    • 这适用于我迄今为止测试过的所有情况(注意,我使用的是两者中的第二个。)感谢您的回答!
    【解决方案3】:

    绘制一个有限状态机来概念化您的正则表达式应该是什么样子几乎总是有帮助的。

    ^(?:\w\.?)*\w$
    

    【讨论】:

    • 对于\w\d 是多余的。消极的前瞻性断言对我来说似乎是多余的。
    • @nhahtdh,啊,那个正则表达式是一种思想流,我想我没有费心去检查它是否是最简单的形式。谢谢。
    猜你喜欢
    • 1970-01-01
    • 2018-11-12
    • 2023-03-03
    • 2017-07-24
    • 1970-01-01
    • 1970-01-01
    • 2021-04-08
    • 2022-07-07
    • 1970-01-01
    相关资源
    最近更新 更多