【问题标题】:Regular Expression for Blocking a character in begining用于在开头阻止字符的正则表达式
【发布时间】:2017-12-26 18:17:41
【问题描述】:

我在尝试阻止在某些白名单字符开头带有减号(-)的任何字符串时遇到正则表达式问题。

^(?!-.*$).([a-zA-Z0-9-:#\\,()\\/\\.]+)$

它在适当的位置阻止减号(-)并允许它在字符序列中的任何位置但如果传递的字符串是单个字符,则此正则表达式不起作用。 例如 A 或 9 等。

请帮我解决这个问题,或者给我一个好的正则表达式来完成任务。

【问题讨论】:

  • 为什么不呢,startWith() 方法 :-)
  • Java != JavaScript
  • Javascript 提供了一个方法(startsWith)来做到这一点:w3schools.com/jsref/jsref_startswith.asp
  • 删除)(之间的.
  • 您的模式非常精确地匹配 2 个或更多字符。它有一个点,后跟一个带有+ 量词的巨型字符集。如果您希望它使用单个字符输入,只需将其更改为 *。另外,这是 Java 还是 Javascript?两种截然不同的语言。

标签: javascript java regex


【解决方案1】:

您的模式在输入字符串中至少需要 2 个字符,因为在第一个前瞻之后有一个点,然后是一个字符类,其后有 +(也就是说,字符串中必须至少出现 1 个字符) )。

因此,您需要删除该点。此外,您不需要转义字符类中的任何特殊字符。此外,为避免匹配以- 开头的字符串,只需(?!-) 就足够了,无需在此处添加.*$。你可以使用

^(?!-)[a-zA-Z0-9:#,()/.-]+$

请参阅regex demo。如果在 JavaScript 的正则表达式文字符号中使用,请记住转义 /,无需在构造函数符号或 Java 正则表达式模式中转义它。

详情

  • ^ - 字符串的开头
  • (?!-) - 不能以 - 开头
  • [a-zA-Z0-9:#,()/.-]+ - 在字符类中定义的 1 个或多个 ASCII 字母、数字和特殊字符(:#,()/.、@987654339 @)
  • $ - 字符串结束。

【讨论】:

    【解决方案2】:

    如果我理解正确,并且您不想在开头加上减号,那么 ^[^-].* 是否可以作为您的正则表达式?如果 Java 的“匹配”以减号开头,它将返回 false

    【讨论】:

      【解决方案3】:

      String 类中有一个方法可以准确地为您提供您所要求的 - 它是一个 startsWith() 方法 - 您可以像这样在代码中使用此方法(您可以将其翻译为“如果给定字符串不以-doSomething 开头,在其他情况下执行else 部分,如果给定的字符串以- 开头,则可以包含一些代码或者如果您不想做任何事情,则可能为空) :

      if(!(yourString.startsWith("-"))) {
          doSomething()
      } else {
          doNothingOrProvideAnyInformationAboutWrongInput()
      }
      

      【讨论】:

        【解决方案4】:

        我认为它可以帮助你。

        ^(?!-).*[a-zA-Z0-9-:#\\,()\/\\.]+$
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2010-10-01
          • 1970-01-01
          • 2019-10-15
          • 2014-10-28
          • 2011-09-16
          • 1970-01-01
          相关资源
          最近更新 更多