首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >正则表达式,只允许特定格式。“约翰-多伊”

正则表达式,只允许特定格式。“约翰-多伊”
EN

Stack Overflow用户
提问于 2016-02-27 17:47:55
回答 6查看 368关注 0票数 8

我做了一些研究,但是我没有发现任何与我所需要的完全相关的东西,每当我试图创建这个表达式时,它总是和我所需要的东西有一点不同。

我尝试了一些类似于[AZaz09]{3,8}\-[AZaz09]{3,8}的东西。

我希望有效的结果只允许文本-文本,其中任何一个或文本可以是字母或数字,但唯一允许的符号是-,这是介于两个文本之间。

每个文本必须至少有三个字符长({3,8}?),然后用-分隔。

因此,要使它有效,一些例子可以是:

代码语言:javascript
复制
Text-Text
Abc-123
123-Abc
A2C-def4gk

无效的测试可能是:

代码语言:javascript
复制
Ab-3
Abc!-ajr4
a-bc3-25aj
a?c-b%
EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2016-02-27 17:51:38

您需要使用锚并使用-,以便将字符类中的字符作为范围读取,而不是单个字符。

尝试:

代码语言:javascript
复制
^[A-Za-z0-9]{3,8}-[A-Za-z0-9]{3,8}$

演示:https://regex101.com/r/xH3oM8/1

您还可以使用i修饰符和\d元字符简化它。

代码语言:javascript
复制
(?i)^[a-z\d]{3,8}-[a-z\d]{3,8}$
票数 11
EN

Stack Overflow用户

发布于 2016-02-27 18:21:30

如果应该允许重音字母,或者在Unicode范围内存在的任何其他字母(比如希腊语或西里尔字母),那么使用u修饰符(用于UTF-8支持)和\pL来匹配Unicode字母( \d表示数字):

代码语言:javascript
复制
$string ="
Mañana-déjà
Text-Text
Abc-123
123-Abc
A2C-def4gk
Ab-3
Abc!-ajr4
a-bc3-25aj
a?c-b%";

$regex='/^[\pL\d]{3,}-[\pL\d]{3,}$/mu';

preg_match_all($regex, $string, $matches);

var_export($matches);

输出:

代码语言:javascript
复制
array (
  0 => 
  array (
    0 => 'Mañana-déjà',
    1 => 'Text-Text',
    2 => 'Abc-123',
    3 => '123-Abc',
    4 => 'A2C-def4gk',
  ),
)

注意:与\w不同的是,[\pL\d]将不匹配下划线。

票数 6
EN

Stack Overflow用户

发布于 2016-02-27 17:52:46

你可以想出以下几点:

代码语言:javascript
复制
<?php
$string ="
Text-Text
Abc-123
123-Abc
A2C-def4gk
Ab-3
Abc!-ajr4
a-bc3-25aj
a?c-b%";

$regex='~
        ^\w{3,}  # at last three word characters at the beginning of the line
        -        # a dash
        \w{3,}$  # three word characters at the end of the line
        ~xm';    # multiline and freespacing mode (for this explanation)
                 # ~xmu for accented characters

preg_match_all($regex, $string, $matches);
print_r($matches);
?>

正如@chris85所指出的,\w也将匹配一个下划线。亭可有一个很好的评论(匹配重音字符,也就是说)。为了实现这一点,修饰符

regex101.com上的演示关于ideone.com的完整代码

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35673217

复制
相关文章

相似问题

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