質問するログイン新規登録

回答編集履歴

2

d

2019/06/07 12:33

投稿

tiitoi
tiitoi

スコア21960

answer CHANGED
@@ -21,4 +21,38 @@
21
21
 
22
22
  print(bool(re.search(r'[a-zA-Z0-9]', "aA00"))) # True
23
23
  print(bool(re.search(r'[a-zA-Z0-9]', "あいう"))) # False
24
+ ```
25
+
26
+ ## 追記
27
+
28
+ 「文字列に英数字が含まれてるのか」といった場合、「文字列にアルファベット**または**数字が少なくとも1文字以上含まれているかどうか」と通常解釈されます。
29
+ そうではなく、「文字列にアルファベット及び数字が両方含まれているかどうか」を判定したい場合は以下のやり方になります。
30
+
31
+
32
+ ```python
33
+ import re
34
+ import string
35
+
36
+ # 正規表現で調べる方法
37
+ def check_by_regex(s):
38
+ return bool(re.search(r"[a-zA-Z]", s)) and \
39
+ bool(re.search(r"[0-9]", s))
40
+
41
+
42
+ print(check_by_regex("あいう")) # False
43
+ print(check_by_regex("aaa")) # False
44
+ print(check_by_regex("aaa000")) # True
45
+ print(check_by_regex("000")) # False
46
+
47
+
48
+ # in で調べる方法
49
+ def check_by_in_operation(s):
50
+ return any(c in string.ascii_letters for c in s) and \
51
+ any(c in string.digits for c in s)
52
+
53
+
54
+ print(check_by_in_operation("あいう")) # False
55
+ print(check_by_in_operation("aaa")) # False
56
+ print(check_by_in_operation("aaa000")) # True
57
+ print(check_by_in_operation("000")) # False
24
58
  ```

1

d

2019/06/07 12:32

投稿

tiitoi
tiitoi

スコア21960

answer CHANGED
@@ -5,4 +5,20 @@
5
5
 
6
6
  # 数字またはアルファベットが1文字以上含まれているかどうか
7
7
  print(any(c.isalnum() for c in s)) # True
8
+ ```
9
+
10
+ ## 追記
11
+
12
+ isalnum() だとひらがな等も True になってしまうので、正規表現で調べたほうが良さそうです。
13
+ 英数字は正規表現で `[a-zA-Z0-9]` なので、re.search() で文字列中に含まれるかどうか調べてください。
14
+ re.search() オブジェクトは見つかった場合は Match オブジェクト、見つからない場合は None を返すので、bool() をとると、前者は True、後者は False に変換できます。
15
+
16
+ ```python
17
+ import re
18
+
19
+ s = "あいう"
20
+ print(any(c.isalnum() for c in s)) # True
21
+
22
+ print(bool(re.search(r'[a-zA-Z0-9]', "aA00"))) # True
23
+ print(bool(re.search(r'[a-zA-Z0-9]', "あいう"))) # False
8
24
  ```