问题标签 [nsdatadetector]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
183 浏览

objective-c - NSDataDetector - 仅解析时间时移动时区(无 mm/dd/yyyy)

我在使用 NSDataDetector 从文本中提取时间时注意到了一些事情,但我不确定我是否理解发生了什么。在我的情况下,我拥有的唯一信息是时间 - 没有额外的日/月/年日期信息。只是日期的时间部分——比如可能嵌入在文本字符串中的“11:30”。

从字符串中提取日期信息的示例函数:

然后我有一个简单的测试函数来向检测器抛出一些时间字符串。

我期望的是 7:30、8:30、9:30 等的时间信息。或者,如果失败,至少在某种程度上是一致的时间(在同一时区)。

但是 - 我得到的内容因我的系统时钟而异。而且我不明白为什么或该怎么做。我的猜测是,在没有检测到日期的日期部分的情况下,日期被设置为当前的 UTC 日期,但我不明白为什么日期/时间会改变结果。日期似乎会根据系统时钟时间而变化,但并非全部。

如果我将系统时钟时间设置为:06:01AM07:01AM08:01AM (所有相同的结果)这些看起来“正确”,因为时间似乎是一致推断的。


  • 原文:07:30 got_date:2016-06-18 12:30:00 +0000 formatted_time:07:30
  • 原文:8:30 got_date:2016-06-18 13:30:00 +0000 formatted_time:08:30
  • 原文:9:30 got_date:2016-06-18 14:30:00 +0000 formatted_time:09:30
  • 原文:10:30 got_date:2016-06-18 15:30:00 +0000 formatted_time:10:30
  • 原文:11:30 got_date:2016-06-18 16:30:00 +0000 formatted_time:11:30

系统时钟时间:美国中部时间上午 09:01 更改8:30 日期(但不更改 7:30、9:30、10:30 或 11:30)


  • 原文:07:30 got_date:2016-06-17 12:30:00 +0000 formatted_time:07:30
  • 原文:8:30 got_date: 2016-06-18 01:30:00 +0000 formatted_time: 20:30
  • 原文:9:30 got_date:2016-06-17 14:30:00 +0000 formatted_time:09:30
  • 原文:10:30 got_date:2016-06-17 15:30:00 +0000 formatted_time:10:30
  • 原文:11:30 got_date:2016-06-17 16:30:00 +0000 formatted_time:11:30

系统时钟时间:美国中部时间上午 10:01(现在 8:30 和 9:30 已移动,但其他时间未移动)


  • 原文:07:30 got_date:2016-06-17 12:30:00 +0000 formatted_time:07:30
  • 原文:8:30 got_date: 2016-06-18 01:30:00 +0000 formatted_time: 20:30
  • 原文:9:30 got_date: 2016-06-18 02:30:00 +0000 formatted_time: 21:30
  • 原文:10:30 got_date:2016-06-17 15:30:00 +0000 formatted_time:10:30
  • 原文:11:30 got_date:2016-06-17 16:30:00 +0000 formatted_time:11:30

系统时钟时间:美国中部上午 11:01(等等......)


  • 原文:07:30 got_date:2016-06-17 12:30:00 +0000 formatted_time:07:30
  • 原文:8:30 got_date: 2016-06-18 01:30:00 +0000 formatted_time: 20:30
  • 原文:9:30 got_date: 2016-06-18 02:30:00 +0000 formatted_time: 21:30
  • 原文:10:30 got_date: 2016-06-18 03:30:00 +0000 formatted_time: 22:30
  • 原文:11:30 got_date:2016-06-17 16:30:00 +0000 formatted_time:11:30

我的假设是我只是不了解日期处理和日期提取的基本知识,但对我来说,只有检测到的日期的一个子集会根据系统时钟时间发生变化,这似乎真的很奇怪。

任何关于为什么会发生这种情况的线索将不胜感激。

0 投票
1 回答
1015 浏览

java - 从字符串中提取地址 - 相当于 iOS 中的 NSDataDetector

在 iOS 中有一个名为的类NSDataDetector,例如,让我们传递一个文本,它会检测该文本是否包含诸如邮政地址、日期、链接之类的内容……

就我而言,我有兴趣为 Android 找到一个类似的工具,它可以检测文本中的地址。我玩过Geocoder,但只有在你已经知道地址的情况下才有效;否则,它不会达到目的。

我正在寻找的一个例子可能是:

给定: This is just a sample text that contains a nice address: 123 W Main St, Imaginary City, IC, 12345 该工具将仅返回123 W Main St, Imaginary City, IC, 12345

请记住,地址可能有不同的格式。

提前致谢!

0 投票
1 回答
353 浏览

objective-c - 检查 UITextView 是否有 url(布尔值)或提取 Url

我知道我可以textView.dataDetectorTypes = UIDataDetectorTypeLink;自动检测链接。

现在这看起来很简单,但我找不到检查UITextView's dataDetector 是否真的找到匹配项的方法。

我正在寻找类似的东西,BOOL hasLink = textView.hasLink;或者甚至BOOL hasLink = textView.text.hasLink;是一种方法来引用NSDataDetectorNSDataDetector

是否没有内置方法来检查这一点,还是我必须独立确认?

编辑:

所以我只是用我自己的NSDataDetector来做到这一点,(下面的代码)但问题仍然是是否真的没有办法提取检测到的数据类型或确认检测到的数据类型在 a 中是否存在UITextView

这是我用来检查自己的:

0 投票
1 回答
169 浏览

ios - 当此字符串包含中文时,NSDataDetector 无法分析 NSString 中的 url

没有匹配================================================ ======

我知道,这是“空格”的问题,如果我在“https”前面添加空格,那么它就可以了。那么NSDataDetector不能解决这个问题吗?

0 投票
2 回答
5089 浏览

ios - 在 Swift 3.0 中使用 NSDataDetector 从字符串中提取地址元素

我正在尝试使用NSDataDetector字符串中的地址。我查看了NSHipster 的文章NSDataDetector以及Apple 的 NSDataDetector 文档。我有以下方法可以从字符串中提取地址:

我想提取地址元素,而不是整个地址。在NSHipster 的NSDataDetector数据检测器匹配类型部分的帖子中,我看到了诸如NSTextCheckingCityKeyNSTextCheckingStateKeyNSTextCheckingZIPKey. 我无法在NSDataDetector的初始化中使用这些键。

我在 GitHub 上四处寻找,看看是否可以找到一个示例,但我能找到的唯一东西是 Objective-C 代码或主 Swift 存储库中的声明性内容。

我 99% 确信我可以提取地址的各个组成部分,但我太笨了,无法弄清楚。感谢您的阅读。我欢迎建议。

0 投票
1 回答
1261 浏览

ios - UITextView 的数据检测器选项和文本外观

UITextView 提供了一个非常有用的数据检测器功能,它支持:

  • 电话号码检测
  • URL检测街道地址检测
  • 事件检测
  • 货件追踪号码检测
  • 航班号检测,以及
  • 信息用户可能想要查找

我准备了一个小样本来测试它,我只有一个问题:

如何更改检测到的文本的外观?

应用于tintColor和/或linkTextAttributes似乎仅适用于 URL、电子邮件和电话号码的更改。应用于UITextViewtintColor或属性的更改似乎对事件/日期或时间、地址、发货编号和航班号等项目没有任何影响。linkTextAttributes

UITextView 的数据检测器选项示例

0 投票
2 回答
472 浏览

ios - react-native 是否支持 NSDataDetector?

有没有办法从Cocoa 的NSDataDetectorreact-native访问?

UITextView类似的东西dataDetectorTypes

我想用它来自动检测地址,链接到地图。

0 投票
0 回答
79 浏览

swift - 我怎样才能断定文本视图中的特定范围是链接?

我有用户点击的位置/范围。我现在需要了解这是否是链接(启用了数据检测器)。有没有办法做到这一点?

谢谢...

0 投票
0 回答
483 浏览

swift - Swift:NSDataDetector 用于字符串中的多个日期

在使用 NSDataDetector 分析日期字符串时,我遇到了一个有点出乎意料的结果:我承认,懒惰的我发现这样解析更容易,而不是尝试在字符串中选择日期:它适用于大多数语言,你不需要知道实际格式。它真的很有效,它确实会选择它找到的第一个日期(如果字符串描述了一个句点,您将能够找到持续时间作为另一个匹配项!)。

…除非字符串描述的时间段超过 12 月 31 日,并且长于大约 2 个月,例如“从 12 月 1 日到 3 月 1 日”,否则它会选择结束日期!
当“从 12 月 1 日到 2 月 1 日”将返回第一个日期!有什么线索吗?

(下面的代码没有处理错误,是的,是故意选择第一个匹配项,这通常是第一个找到的日期)

0 投票
0 回答
108 浏览

ios - iOS 上的日期检测:如何在 iOS 上检测和处理日期?

首先,我正在开发的平台:Swift 3 + iOS 10.3

我要完成的工作:

  • 用户尝试在文本视图中输入一些文本,其中包括一些 UITextView 中的时间。例如:“今天晚上 10 点开会”
  • 现在我有了文本,我想从事件中收集日期,即“今天晚上 10 点”
  • 我想将此信息转换为Date()对象。

到目前为止我所知道和尝试过的:

  • NSDataDetectors:它们对于从字符串中提取这些信息非常有用,但是正如您在此处看到的,用户可以输入各种格式的日期,这使我无法涵盖NSDateFormatter().
  • UITextViews:它们内置了数据检测,但这主要用于不可编辑的文本,最适合直接在 UI 中进行用户交互。我只需要提取这些信息。

它已经做什么了? 苹果系统。如果您在 macOS 上使用过提醒日历,则输入提醒/事件很容易:在日历中,添加一个“晚上 10 点开会”的事件会创建一个名为“晚上10 点会议”的事件,而不是简单地转换整个文本并创建一个事件称为“晚上 10 点开会”

所以我想知道如何在 iOS 上利用上述功能,这似乎内置在 macOS 上?似乎没有关于此特定功能的帖子或教程(至少我找不到)。如果没有用于此的 API,我将不胜感激,如果有人能提出一种替代方法来处理文本中的日期,以便我能够完成上述操作。