电话号码如下:
+38097-12-34-123
+380971234-123
380971234-123
我应该匹配字符串中的电话号码,假设它们用空格分隔。所以这不匹配字符串:
45+38097-12-34-123
+38097-12-34-123=TEST
my number:38097-12-34-123
没有空白分隔符要求的电话号码工作正则表达式是:
\\+?380\\d\\d(?:-?\\d){7}
我尝试使用\b
/ \B
boundary matcher进行测试,但如果使用了前导+
符号则无法进行测试。
更新我修复了示例,因为我是从内存中输入的,忘了放8
符号。
UPDATE2 @Washington Guedes 您的正则表达式(我从\
剥离\-
):
\b(\+?\d{4}(?:-\d{2}-|\d{2})\d{2}-\d{3})\b
不起作用,因为匹配字符串中的+
:
bash# groovysh
groovy:000> "45 +8097-12-34-123".matches(".*\\b(\\+?\\d{4}(?:-\\d{2}-|\\d{2})\\d{2}-\\d{3})\\b.*")
===> true
groovy:000> "45+8097-12-34-123".matches(".*\\b(\\+?\\d{4}(?:-\\d{2}-|\\d{2})\\d{2}-\\d{3})\\b.*")
===> true
我希望在+
标志之前没有白人的探险失败。
@stribizhev 与您的建议相同:
groovy:000> "45+38097-12-34-123".matches(".*(?<!\\w)\\+?380\\d\\d(?:-?\\d){7}(?!\\w).*")
===> true
groovy:000> "45 +38097-12-34-123".matches(".*(?<!\\w)\\+?380\\d\\d(?:-?\\d){7}(?!\\w).*")
===> true
答案 0 :(得分:1)
最后,我设法写了一个愚蠢的解决方案,检查字符串的开头或空格的提示:
groovy:000> "+38097-12-34-123".matches("(?:^|.*\\s)(\\+?380\\d\\d(?:-?\\d+){7})\\b.*")
===> true
groovy:000> "45+38097-12-34-123".matches("(?:^|.*\\s)(\\+?380\\d\\d(?:-?\\d+){7})\\b.*")
===> false
groovy:000> "45 +38097-12-34-123".matches("(?:^|.*\\s)(\\+?380\\d\\d(?:-?\\d+){7})\\b.*")
===> true
groovy:000> "45 +38097-12-34-123xxx".matches("(?:^|.*\\s)(\\+?380\\d\\d(?:-?\\d+){7})\\b.*")
===> false
groovy:000> "45 +38097-12-34-123 xxx".matches("(?:^|.*\\s)(\\+?380\\d\\d(?:-?\\d+){7})\\b.*")
===> true
最终\b
可以替换为(?:\s.*|$)
但是groovy shell解析器对$
符号感到厌烦((没有时间深入到新问题。
答案 1 :(得分:1)
您遇到的主要困难是在可选子模式var TopicsList = React.createClass({
render: function () {
return (
<div className="row">
<IndividualTopic topic_no="1">
Topic 1
</IndividualTopic>
<IndividualTopic topic_no="2">
Topic 2
</IndividualTopic>
<IndividualTopic topic_no="3">
Topic 3
</IndividualTopic>
<IndividualTopic topic_no="4">
Topic 4
</IndividualTopic>
<div className="col-sm-12">
{ this.state.showTopicDescription ? <IndividualTopicPages /> : null }
</div>
</div>
);
}
});
var selected_topic_no;
var IndividualTopic = React.createClass({
getInitialState: function() {
return { showTopicDescription: false };
},
onClick: function() {
this.setState({ showTopicDescription: true });
selected_topic_no = this.props.topic_no - 1;
},
render: function () {
return (
<div>
<div className="col-sm-2">
<div onClick={this.onClick} className="single-topic" data-topic-no={this.props.topic_no}>
{this.props.children}
</div>
</div>
</div>
);
}
});
之前使单词边界工作。使用尾随单词边界,您可以使用\+?
或\b
(仅当您的上下文未知时才更可取,但在此处,您始终有必填数字,因此,(?!\w)
是足够)。
由于回溯,\b
被“狼吞虎咽”,而后备\+?
仅检查第一个数字是否前面带有非单词字符。由于在(?<!\w)
中,45+38097-12-34-123
前面有一个非单词3
,因此匹配。
解决方案可以在前瞻中使用替代方案:
+
请参阅IDEONE demo