首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >限制输入数据

限制输入数据
EN

Stack Overflow用户
提问于 2013-06-04 12:56:56
回答 3查看 196关注 0票数 2

我对正则表达式很陌生。最近几个小时,我一直在阅读regex,以了解如何使用regex*实现以下目标,但运气不佳。我的大脑开始疼了。所以这个求助电话。下面是我要应用于数据输入字段的限制,我应该使用什么正则表达式?

  1. 第一个和最后一个字符应该是字母数字,“。(即点)或"_“(即下划线)
  2. 第一个字符和最后一个字符之间的字符可以是字母数字,“。(即点)、"_“(即下划线)或"-”(即连字符)
  3. “人物”(即点)和"-“(即连字符)不能连续出现。
  4. 输入中至少应该有一个字母数字字符。

一些有效的输入数据:

代码语言:javascript
复制
.abc_
__abc.d-e.
.__a.
.a__b.
_a-b.
abc
a___.

感谢并致以问候

~插头

  • 我正在使用第三方库,在内部使用boost-regex解析表达式。
EN

回答 3

Stack Overflow用户

发布于 2013-06-04 13:17:22

你真的应该展示你到目前为止所展示的东西。

尽管如此,覆盖您的限制的正则表达式应该是这样的:

代码语言:javascript
复制
^[a-zA-Z0-9\._](?:[a-zA-Z0-9_]*(?:\.(?!\.))*(?:-(?!-))*[a-zA-Z0-9_]*)*[a-zA-Z0-9\._]$

有些人很可能会有更好的格式,但在http://www.regex101.com/中,它似乎适用于我测试过的所有东西。

票数 2
EN

Stack Overflow用户

发布于 2013-06-04 13:29:45

这与单个正则表达式是非常混乱的。其实并不是不可能,但你会疯狂地跳起来去做,这样你最好写一个状态机。但是,使用一系列regex测试很容易做到这一点。

对于您的条件1和2,文本应该匹配以下内容(允许文本可能只有一个字符长):

代码语言:javascript
复制
 ^([a-z0-9._]|[a-z0-9._][a-z0-9_.-]*[a-z0-9._])$  

对于您的条件3,文本不应该匹配这些正则表达式之一(适当选择,您的规范不太清楚)。

代码语言:javascript
复制
 .*[.-][.-].*
 .*(.-|-.).*
 .*(\.\.|--).*

对于条件4,文本应该与以下内容相匹配:

代码语言:javascript
复制
 .*[a-z0-9].*  

我还没考虑到大写字符。如果需要,将这些添加到字符模式中。

票数 2
EN

Stack Overflow用户

发布于 2013-06-04 19:16:36

有趣的问题。可以用一个非平凡的正则表达式来解决。这里是Java语法(它要求正则表达式用字符串括起来)。

代码语言:javascript
复制
Pattern re_valid = Pattern.compile(
    "    # Regex to validate special word requirements.                                   \n" +
    "    ^                             # Anchor to start of string. And...                \n" +
    "    (?=[A-Za-z0-9._])             # First char is alphanum, dot or underscore. And...\n" +
    "    (?=.*[A-Za-z0-9._]$)          # Last char is alphanum, dot or underscore. And... \n" +
    "    (?=[^A-Za-z0-9]*[A-Za-z0-9])  # Contains at least one alphanum.                  \n" +
    "    (?:                           # Group two possible content formats.              \n" +
    "      [A-Za-z0-9_]+               # Case 1: Begins with one or more non-[-.].        \n" +
    "      (?:                         # Zero or more [-.] separated parts.               \n" +
    "        [-.]                      # Each part separated by one [-.],                 \n" +
    "        [A-Za-z0-9_]+             # followed by one or more non-[-.].                \n" +
    "      )*                          # Zero or more [-.] separated parts.               \n" +
    "      [.]?                        # May end with one [-.].                           \n" +
    "    | [.]                         # Or Case 2: Begins with hyphen or dot.            \n" +
    "      (?:                         # Zero or more [-.] separated parts.               \n" +
    "        [A-Za-z0-9_]+             # One or more non-[-.],                            \n" +
    "        [-.]                      # followed by one [-.].                            \n" +
    "      )*                          # Zero or more [-.] separated parts.               \n" +
    "      [A-Za-z0-9_]*               # May end with zero or more non-[-.].              \n" +
    "    )                             # End group of two content alternatives.           \n" +
    "    $                             # Anchor to end of string.                         ", 
    Pattern.COMMENTS);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16918483

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档