Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/neo4j/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 将数字与空格匹配,但不在中间使用换行符?_Php_Regex_Newline_Space - Fatal编程技术网

Php 将数字与空格匹配,但不在中间使用换行符?

Php 将数字与空格匹配,但不在中间使用换行符?,php,regex,newline,space,Php,Regex,Newline,Space,我设计了正则表达式/(\+|0 |\()[\d()\s-]{6,20}\d/g,以匹配以下格式的电话号码 (\+\124; 0\\()首先是匹配+或0或 [\d()\s-]用于匹配中间的数字、括号、空格和连字符 \d匹配最后一位的数字 +43543765434 0043 543 765 5434 05437655434 +43(0)543765434 05437655434 0543-765-5434 不幸的是,这个正则表达式也匹配中间有换行符的数字,比如 “+43 654 416 4444“或

我设计了正则表达式
/(\+|0 |\()[\d()\s-]{6,20}\d/g
,以匹配以下格式的电话号码

(\+\124; 0\\()
首先是匹配+或0或

[\d()\s-]
用于匹配中间的数字、括号、空格和连字符

\d
匹配最后一位的数字

+43543765434

0043 543 765 5434

05437655434

+43(0)543765434

05437655434

0543-765-5434

不幸的是,这个正则表达式也匹配中间有换行符的数字,比如

“+43

654 416 4444“或

“stowasser09

六十五

8090“

  • 因此,我考虑将正则表达式中的
    \s
    替换为 空白,但不是换行符,但无法使其工作

  • 另外,最好将
    {6,20}
    应用于整个正则表达式,而不是 请只看
    [\d()\s-]
    -部分好吗?我想象一下类似于
    /(\+\0\\()[\d()\s-]\d){6,20}/g
    ,也就是说,整个匹配的电话号码不应该短于6个字符,也不应该长于20个字符,包括+\0 |(第一位和最后一位)


  • 谢谢!

    \s
    的意思是:匹配任何空格字符。只需将其替换为一个简单的空格
    '

    /(\+|0|\()[\d() -]{6,20}\d/g
    

    请参见此

    \s
    替换为空格字符(
    '
    )最后面的建议将避免换行符问题,但您的另一个问题不清楚。请明确定义您要匹配的模式和不想匹配的模式。ETC不是有用的描述符。但要匹配数字、数字、可选前导+、括号、破折号和空格的组合,限制为6-20个字符,您可以使用:\+((?=[-0-9()]){6,20}但我不确定你真正想要的是什么。你真的需要验证它们吗?有小于6和大于20的,让用户键入他们想要的内容会有影响吗。你可以用只匹配水平空格的
    \h
    替换
    \s
    。@bromelio现在你的要求更清楚了,只需要定义就可以了请将第一个和最后一个字符划为任意字符,并适当调整“中间”部分的长度谢谢你,这回答了我的1.问题!@bromelio car你能解释更多你的第二个问题吗?@bromelio第一个
    +|0 |(
    是必需的。所以只需从
    {6,20}
    中减去
    1
    ,它就会变成
    {5,19}