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}